python接口自动化测试框架设计 ( 第四章)-运行并设置断言,生成报告

如果你看不懂,点击下方不迷路:

python接口自动化测试框架结构 ( 第三章)

前方高能!!正文开始!

1、创建testcase.py文件
2、新增方法获取excel表内的数据,代码如下(可以放到utlis.py文件里):

def case_data(dataname) -> list:
    """
    处理测试用例数据
    :param dataname: 测试用例文件名
    :return: 测试用例数据
    """
    test_case = '../database/{}.xlsx'.format(dataname)
    test_num = Excel('r', test_case).read()
    testdata = excel_dict(test_num)
    return testdata

日常验证,代码如下:

if __name__ == '__main__':
    print(case_data('testcase'))

运行结果:
在这里插入图片描述
返回结果为一个例表,列表内有两条数据!正常返回即可

3、创建__init__.py文件代码如下:

import logging

from lib.log import init_logging

# 环境切换 loc,dev,uat
surroundings = 'loc' #用来代替get_test_url方法的参数

init_logging()
logging.info("测试日志信息|{}环境".format(surroundings))

此处倒入后方可TestCase类打印日志!


4、新建TestCase类,用来执行代码和设置断言,使用ddt做参数化

新建代码如下:

@ddt.ddt
class TestCase(unittest.TestCase):
    
    @ddt.data(*case_data('testcase'))
    def test_run_case(self, data):
        """
        执行测试脚本
        :param data: 参数化后测试用例|dict类型
        :return:
        """
        response = send_requests(data)  # 返回response
        print('________') #没有实际意义- - 
        logging.info("页面返回信息:%s" % response.json())

执行结果:
在这里插入图片描述
上述执行成功成功后,新增写入操作:
因写入格式需list,直接使用封装好的方法处理写入的数据(不懂回去第二章)

        code = data['code']  # 获取表内code
        status = data['status']  # 获取表内状态码
        msg = data['msg']  # 获取响应状态
        if code == self.result['code'] and status == self.response.status_code and
        		 msg == self.result['msg']:  # 判断返回数据是否和表内数据相同
            self.msg_data = "PASS" # 这个值要用来写入
        else:
            self.msg_data = "FAIl" # 这个值要用来写入
        Excel('w', '../results/results.xlsx') \
            .write(write_result(value7=str(self.result), value8=self.msg_data)) # 写入时需转换为str类型 (两个参数为例)

运行成功后:
python接口自动化测试框架设计 ( 第四章)-运行并设置断言,生成报告_第1张图片

写入数据成功后,添加设置断言:

        self.assertEqual(self.result['code'], code)
        self.assertEqual(self.response.status_code, status)
        self.assertEqual(self.result['msg'], msg)

运行结果:
未报错表示未发现异常,断言通过
python接口自动化测试框架设计 ( 第四章)-运行并设置断言,生成报告_第2张图片

完整代码如下:

import unittest
import ddt
from data.data_driven import data_processing
from lib.sendrequest import send_requests
from lib.utlis import *


def case_data(dataname) -> list:
    """
    处理测试用例数据
    :param dataname: 测试用例文件名
    :return: 测试用例数据
    """
    test_case = '../database/{}.xlsx'.format(dataname)
    test_num = Excel('r', test_case).read()
    testdata = excel_dict(test_num)
    return testdata


@ddt.ddt
class TestCase(unittest.TestCase):

    @ddt.data(*case_data('testcase'))
    def test_run_case(self, data):
        """
        执行测试脚本
        :param data: 参数化后测试用例|dict类型
        :return:
        """
        self.response = send_requests(data)  # 返回response
        print('________')
        logging.info("页面返回信息:%s" % self.response.json())
        self.result = self.response.json()
        code = data['code']  # 获取表内code
        status = data['status']  # 获取表内状态码
        msg = data['msg']  # 获取响应状态
        if code == self.result['code'] and status == self.response.status_code \
                and msg == self.result['msg']:  # 判断返回数据是否和表内数据相同
            self.msg_data = "PASS"
        else:
            self.msg_data = "FAIl"
        Excel('w', '../results/results.xlsx') \
            .write(write_result(value7=str(self.result), value8=self.msg_data))
        self.assertEqual(self.result['code'], code)
        self.assertEqual(self.response.status_code, status)
        self.assertEqual(self.result['msg'], msg)


4、新建run.suite.py,运行并生成报告,代码如下:

from case.testcase import TestCase
from setting import REPORT_PATG  #倒入setting.py内的变量
from tools.HTMLTestRunner import HTMLTestRunner #网上下一个就行
import unittest

# 1.创建测试套件
suite = unittest.TestSuite()
# 2.添加测试用例
suite.addTest(unittest.makeSuite(TestCase))
# 3.指定报告生成位置 ————REPORT_PATG为存放测试报告的路径(setting.py内的变量)
with open(REPORT_PATG, "wb") as f:
    runner = HTMLTestRunner(f, title="AsimovApi", description="None")
    runner.run(suite)

运行结果:
python接口自动化测试框架设计 ( 第四章)-运行并设置断言,生成报告_第3张图片
报错原因为路径的问题,run.suite.py和存放用例的文件为同级,在文件seeting.py内新增:

case_root = os.path.join(PROJECT_ROOT, 'database')  # 测试用例
results_root = os.path.join(PROJECT_ROOT, 'results', 'results.xlsx')#测试结果
REPORT_PATG = os.path.join(PROJECT_ROOT, 'report', 'index.html')  # 报告路径

用seeting.py的变量替换路径后代码如下(完整代码):

import unittest
import ddt
from lib.sendrequest import send_requests
from lib.utlis import *
from setting import case_root, results_root


def case_data(dataname) -> list:
    """
    处理测试用例数据
    :param dataname: 测试用例文件名
    :return: 测试用例数据
    """
    test_case = case_root + '/{}.xlsx'.format(dataname) #case_root ——为存放测试用例的路径
    test_num = Excel('r', test_case).read()
    testdata = excel_dict(test_num)
    return testdata


@ddt.ddt
class TestCase(unittest.TestCase):

    @ddt.data(*case_data('testcase'))
    def test_run_case(self, data):
        """
        执行测试脚本
        :param data: 参数化后测试用例|dict类型
        :return:
        """
        self.response = send_requests(data)  # 返回response
        print('________')
        logging.info("页面返回信息:%s" % self.response.json())
        self.result = self.response.json()
        code = data['code']  # 获取表内code
        status = data['status']  # 获取表内状态码
        msg = data['msg']  # 获取响应状态
        if code == self.result['code'] and status == self.response.status_code \
                and msg == self.result['msg']:  # 判断返回数据是否和表内数据相同
            self.msg_data = "PASS"
        else:
            self.msg_data = "FAIl"
            #results_root ———为写入文件存放的路径(setting.py内的变量)
        Excel('w', results_root) \
            .write(write_result(value7=str(self.result), value8=self.msg_data))
        self.assertEqual(self.result['code'], code)
        self.assertEqual(self.response.status_code, status)
        self.assertEqual(self.result['msg'], msg)

最后再次运行run.suite.py,运行成功后新增日志文件和报告:
python接口自动化测试框架设计 ( 第四章)-运行并设置断言,生成报告_第4张图片
点击不迷路,python接口自动化测试框架结构 ( 第五章)
非常感谢您的阅读,第一次写博客文章,写的不好的地方多度包含,欢迎大佬指出代码中的不足,共同提升、共同进步!(要源代码 点赞关注后+VX dengwoi )

你可能感兴趣的:(python+request,request,接口自动化测试框架)