zoukankan      html  css  js  c++  java
  • 通过requests + pytest + allure 实现接口自动化测试

    ​ 通过requests + pytest + allure 实现接口自动化测试


    1. 文件导入并读取文件,一般接口文档文件为excl或者csv文件。下面分别读取文件内容:

    # csv 文件
    url,params,method
    http://apis.juhe.cn/simpleWeather/query,"{""city"":""北京"",""key"":""c00bcd3ea3822ee70d7d060e1c8085f6""}",get
    http://apis.juhe.cn/sxpd/query,"{""men"":""蛇"",""women"":""羊"",""key"":""bf871cb11079dfbce489822a9461b0b9""}",post
    
    # 读取csv文件
    import csv              # 导包
    class ReadCsvClass():
        def readCsvMethod(self):
            item = []       # 定义一个空列表
            rr = csv.reader(open("../datas/data.csv", "r"))   # 以读的方式打开csv文件
            for csv_i in rr:             # 循环每一条数据
                # print(csv_i)
                item.append(csv_i)        # 添加到定义好的列表中
            item = item[1:]               # 清洗掉第一行不需要的数据
            return item                  # 以列表的方式返回csv读取的数据
    
    
    rcc = ReadCsvClass()
    print(rcc.readCsvMethod())
    
    # excel 数据
    url	params	method
    http://apis.juhe.cn/simpleWeather/query	  {"city":"京","key":"c00bcd3ea3822ee70d7d060e1c8085f6"}	get
    http://apis.juhe.cn/sxpd/query	{"men":"蛇","women":"羊","key":"bf871cb11079dfbce489822a9461b0b9"}	post
    
    
    # 读取exclx数据
    from openpyxl import load_workbook   # 导包,导入读取Excel文件的包
    class UseExcel():
        def get_TestExcel(self):
            # 打开表
            workbook = load_workbook("..datasdata.xlsx")
            # 定位表单
            sheet = workbook['Sheet1']
            print(sheet.max_row)  # 3 行
            print(sheet.max_column)  # 3 列
            test_data = []  # 把所有行的数据放到列表中
            for i in range(2, sheet.max_row + 1):    # 从第二行开始读取数据,读到最后一行
                sub_data = {}  # 把每行的数据放到字典中
                for j in range(1, sheet.max_column + 1):    # 外层循环控制行,内层循环控制列
                    sub_data[sheet.cell(1, j).value] = sheet.cell(i, j).value  # 键值对赋值
                test_data.append(sub_data)  # 拼接每行单元格的数据  并添加到列表中
            return test_data   # 返回一个列表嵌套字典的格式
    
    
    t = UseExcel()
    f = t.get_TestExcel()
    print(f)
    

    2.文件读取完成后,通过requests向该接口发送请求,并获取其中的响应码作为判断接口是否成功的标准。

    # 请求csv中的接口
    from readdatas.readcsv import ReadCsvClass     # 导入读取的数据模块
    ecc = ReadCsvClass()             # 实例化
    lists = ecc.readCsvMethod()           # 获得读取csv的数据
    import requests                   # 导入request的包
    class RequestCsvClass():         
        def requestCsvMethod(self):
            item = []
            for csv_i in lists:       # 循环取值,判断请求方式是get还是post,分别利用不同的requests发送请求
                if csv_i[2] == "get":
                    rr = requests.get(csv_i[0], params=csv_i[1].encode("utf-8").decode("latin1"))     # .encode("utf-8").decode("latin1"),如果报错,则使用这个
                    item.append(rr.status_code)   # 获取响应码并添加
                else:
                    rr = requests.post(csv_i[0], data=csv_i[1].encode("utf-8").decode("latin1"))
                    item.append(rr.status_code)
            return item       # 返回由响应码组成的列表
    
    
    rc = RequestCsvClass()
    print(rc.requestCsvMethod())
    
    # 请求excel 表中的数据
    from readdatas.readxlsx import UseExcel    # 导入读取excle中的数据模块
    ue = UseExcel()          # 实例化
    lists = ue.get_TestExcel()    # 获取excle表中的数据
    import requests
    class RequestsExcelClass():
        def requestsExcelMethod(self):
            item = []    # 定义空列表添加状态响应码
            for excel_i in lists:     # 循环取值,判断请求方式是get还是post,分别利用不同的requests发送请求
                if excel_i["method"] == "get":
                    rr = requests.get(excel_i["url"], params=excel_i["params"].encode("utf-8").decode("latin1"))
                    item.append(rr.status_code)
                else:
                    rr = requests.post(excel_i["url"], data=excel_i["params"].encode("utf-8").decode("latin1"))
                    item.append(rr.status_code)
            return item  # 返回由状态码组成的数组
    rc = RequestsExcelClass()
    print(rc.requestsExcelMethod())
    
    

    3.循环所有的状态码,使获取的状态码与200做对比,如果状态码不等于200,则接口错误

    # csv接口文档使用pytest+allure实现错误展示
    import pytest, os      # 导包
    from requestdata.requcsv import RequestCsvClass # 将含状态码的列表获取
    rc = RequestCsvClass()
    ff = rc.requestCsvMethod()
    class TestClas():
        def test001(self):
            for c in ff:     # 通过pytest断点判断状态码是否为200,不为200则显示错误
                assert c == 200
    if __name__ == '__main__':
        pytest.main(['--alluredir', 'report/result', 'tsetcsv.py'])
        split = 'allure ' + 'generate ' + './report/result ' + '-o ' + './report/html ' + '--clean'
        os.system(split)         # allure的固定代码
    
    
    # excle接口文档使用pytest+allure实现错误展示
    import pytest, os                 # 同上
    from requestdata.readexcl import RequestsExcelClass
    rc = RequestsExcelClass()
    ff = rc.requestsExcelMethod()
    class TestClas():
        def test001(self):
            for c in ff:
                assert c == 200
    if __name__ == '__main__':
        pytest.main(['--alluredir', 'report/result', 'testexcl.py'])
        split = 'allure ' + 'generate ' + './report/result ' + '-o ' + './report/html ' + '--clean'
        os.system(split)
    
    

    找到html文件查看结果

  • 相关阅读:
    盘古越狱工具在用户空间的行为
    hdu 5538 House Building(长春现场赛——水题)
    html 锚点定位
    OOP版电子词典
    有趣的JavaScript原生数组函数
    <LeetCode OJ> 121. /122. Best Time to Buy and Sell Stock(I / II)
    hadoop 出现FATAL conf.Configuration: error parsing conf file,异常
    IT痴汉的工作现状10-Sprint Planning
    2015 Astar Contest
    无法使用BIPublisher开发报表
  • 原文地址:https://www.cnblogs.com/zjldeboke/p/14860572.html
Copyright © 2011-2022 走看看