pytest接口自动化从无到有系列--02 第一个自动化接口

语法要求:

  1. 测试脚本名以test_开头(或以_test结尾也可以)

  2. 测试脚本中若是执行函数,以test_开头

  3. 测试脚本中若是执行一个类中的函数,测试类以Test开头,并且不能带有init方法

  4. 断言使用assert

  5. 执行文件下所有的测试脚本,命令为pytest【cd到对应文件下执行】 或者 pytest 文件名/

  6. 执行文件下指定的测试脚本,命令为pytest -q 指定测试脚本名称【cd到对应文件下执行】 或者 pytest 文件名/脚本名

安装requests库

# --default-timeout=200设置超时时间
pip --default-timeout=200 install requests
# 设置阿里代理
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/

在这里插入图片描述
pytest 命令行执行
-x选项
Pytest会运行每一个搜索到的测试用例,如果某个测试函数被断言失败,或者触发了外部异常,则该测试用例的运行就会停止,pytest将其标记为失败后继续运行一下测试用例,然而在debug的时候,我们往往希望遇到失败时立刻停止整个会话

测试报告
pip install pytest-html
pytest ./ --html=…/report/first.html

操作数据库
https://www.cnblogs.com/it-tsz/p/10205940.html
pip --default-timeout=200 install pymysql

代码提交githab

https://www.cnblogs.com/yuanchaoyong/p/9976895.html

FAQ:

问题1:
pycharm please specify a different SDK name
在这里插入图片描述
解决方法:
在setting里面的解释器选择里面,打开show all,删除其他多余的环境
在这里插入图片描述
问题2:
pip安装完requests包后pycharm中仍然不能import requests库
https://blog.csdn.net/kouyi5627/article/details/80531442

问题3:
No schema supplied. Perhaps you meant
解决:
访问域名时,要写http://域名

参考文章:
https://blog.csdn.net/weixin_34067980/article/details/94348138

from pyecharts.charts import Bar
from pyecharts.charts import Page
from pyecharts import options as opts
from pyecharts.globals import ThemeType
import pandas as pd
from pylab import mpl
from pyecharts.components import Table
from pyecharts.options import ComponentTitleOpts

def get_data_dict():
    mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 指定默认字体:解决plot不能显示中文问题
    mpl.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题

    datas = pd.read_excel(r'C:\Users\Administrator\Desktop\软件需求-2022-11-18.xls')

    FX = pd.read_excel(r'C:\Users\Administrator\Desktop\故障矩阵-2022-11-18.xls')

    # ---------------------------软件需求------------------------------------
    # 软件需求有效需求总数
    req_all_item = len(datas[datas['分类'].str.contains('功能|非功能') & (datas['状态'] != 'rejected')])
    print(req_all_item)

    # 软件需求已向上追溯个数
    req_up_trance = len(
        datas[datas['分类'].str.contains('功能|非功能') & (datas['状态'] != 'rejected') & (datas['追溯状态'].str.contains('up'))])
    print(req_up_trance)
    # 软件需求向上追溯率
    a = (req_up_trance / req_all_item)*100
    re_up_trance_rate = ('%.2f' % a)
    print(re_up_trance_rate)

    # 软件需求已向下追溯个数
    req_down_trance = datas[datas['分类'].str.contains('功能|非功能') & (datas['状态'] != 'rejected')]
    req_down_trance_count = req_down_trance['向下追溯软件架构'].notnull().sum()
    print(req_down_trance_count)

    # 软件需求向上追溯率
    b = (req_down_trance_count / req_all_item)*100
    req_down_trance_rate = ('%.2f' % b)

    print(req_down_trance_rate)

    # ---------------------------故障矩阵------------------------------------

    # 故障矩阵有效需求总数
    fx_all_item = len(FX[FX['分类'].str.contains('功能|非功能') & (FX['状态'] != 'rejected')])
    print(fx_all_item)

    # 故障矩阵已向上追溯个数
    fx_up_trance = len(
        FX[datas['分类'].str.contains('功能|非功能') & (FX['状态'] != 'rejected') & (FX['追溯状态'].str.contains('up'))])
    print(fx_up_trance)
    # 故障矩阵向上追溯率
    c = (fx_up_trance / fx_all_item)*100
    fx_up_trance_rate = ('%.2f' % c)
    print(fx_up_trance_rate)

    # 故障矩阵已向下追溯个数
    fx_down_trance = FX[FX['分类'].str.contains('功能|非功能') & (FX['状态'] != 'rejected')]
    fx_down_trance_count = fx_down_trance['向下追溯软件架构'].notnull().sum()
    print(fx_down_trance_count)

    # 故障矩阵向上追溯率
    d = (fx_down_trance_count / fx_all_item)*100
    fx_down_trance_rate = ('%.2f' % d)
    print(type(fx_down_trance_rate))

    # ------------------绘制追溯符合度簇状图-------------------------
    # 创建软件需求和故障矩阵,追溯符合度dataframe
    re_list = [re_up_trance_rate, req_down_trance_rate]
    fx_list = [fx_up_trance_rate, fx_down_trance_rate]
    pdt_list = ['向上追溯率', '向下追溯率']
    data_dict = {'data': [re_list, fx_list], 'head': ['软件需求', '故障矩阵'], 'item': pdt_list}
    print(data_dict)
    return data_dict


def create_bar(bar_dict):
    # 建立百分比的柱状图
    bar_item = bar_dict['item']
    bar_head = bar_dict['head']
    bar_data = bar_dict['data']
    bar = (
        # 实例化一个柱状图
        Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
            # 链式调用
            .add_xaxis(bar_item)
            .set_global_opts(title_opts=opts.TitleOpts(title="追溯情况"))
    )
    for i in range(len(bar_head)):
        bar.add_yaxis(bar_head[i], bar_data[i], label_opts=opts.LabelOpts(formatter="{c} %"))
    bar.set_global_opts(
        yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="{value} %"), interval=10))
    return bar

def create_table(bar_dict):
    table = Table()

    headers = ["分类", "向上追溯", "向下追溯软件架构"]
    list3 = ["软件需求"]
    list5 = bar_dict['data'][0]
    list1 = list3 +list5
    list4 = ["故障矩阵"]
    list6 = bar_dict['data'][1]
    list2 = list4 + list6
    rows = [
        list1,
        list2
    ]
    print('111111111111',rows)
    table.add(headers, rows)
    table.set_global_opts(
        title_opts=ComponentTitleOpts(title="Table-基本示例")
    )
    table.render("table_base.html")
    return table

if __name__ == "__main__":
    data = get_data_dict()
    bar = create_bar(data)
    bar.render('bar_render.html')
    data1 = get_data_dict()
    bar1 = create_bar(data1)
    bar1.render('bar1_render.html')
    table1 = create_table(data)
    table1.render("table_base.html")
    page = Page(layout=Page.DraggablePageLayout)
    page.add(bar, bar1, table1)
    page.render('all_render.html')
    Page.save_resize_html('all_render.html', cfg_file='chart_config.json', dest='new_all_render.html')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值