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'))

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


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

新建代码如下:

@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() # 返回的结果

执行结果:
在这里插入图片描述
上述执行成功成功后,新增写入操作:
因写入格式需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类型 (两个参数为例)

运行成功后:
在这里插入图片描述

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

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

运行结果:
未报错表示未发现异常,断言通过
在这里插入图片描述

完整代码如下:

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)

运行结果:
在这里插入图片描述
报错原因为路径的问题,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接口自动化测试框架结构 ( 第五章)
非常感谢您的阅读,第一次写博客文章,写的不好的地方多度包含,欢迎大佬指出代码中的不足,共同提升、共同进步!(要源代码 点赞关注后+VX dengwoi )

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值