欢迎来到Felix的博客

雨恨云愁,江南依旧称佳丽。水村渔市。一缕孤烟细。天际征鸿,遥认行如缀。平生事。此时凝睇。谁会凭阑意
返回顶部

pytest---实现接口自动化的demo

今天同事遇到一个问题,想要实现一个接口自动化的框架,实现功能需要集成pytest、allure,执行完后,输出可视化的报告。但是他一直解决不了问题,所以找到我,让我帮忙看下

想要完成这个功能,需要了解pytest的特性

例如:

  • 脚本文件名需要以test开头或者test结尾
  • 测试类,需要已Test开头,并且内部不能有__init__(self)方法
  • 测试case方法,需要已test_开头

既然想要做成一个公共的方法,自然接口具体数据就需要通过配置来完成,以配置形式来处理

以下是我做的一个demo,很简单的demo,具体的情况,脚本要怎么封装,需要根据想要的功能,去拓展或者修改,我这只是引导一个思路
首先是配置文件,我以txt文件举例

内容如下:

test_case001 我是模块1 我是第一个测试点 1 2
test_case002 我是模块1 我是第二个测试点 2 2
test_case003 我是模块2 我是第一个测试点 3 4
test_case004 我是模块2 我是第二个测试点 4 5

按照自己需要的格式,来准备数据。我这是举了一个简单例子,实际上通过yml文件或者json文件的格式来弄,易读性更好一些,并且我的脚本没有写预期结果、实际结果,需要自行补充

脚本内容如下 :

# -*- coding: utf-8 -*-
__author__ = 'felix'

import allure, pytest

#定义一个测试类
class TestCase(object):
    pass

with open("./test.txt.", 'r', encoding='utf8') as f:
    for l in f:
        line = l.strip()
        line_list = line.split(" ")

        @pytest.mark.parametrize('a, b', [(line_list[4], line_list[3])])    #参数化
        @allure.feature("{}".format(line_list[1]))                          #allure一级模块
        @allure.story("{}".format(line_list[2]))                            #allure二级模块
        def myfunc(self, a, b):
            assert a == b
        setattr(TestCase, "{}".format(line_list[0]), myfunc)                #对TestCase类进行动态创建方法,方法名需要以test开头

执行脚本:pytest test_common.py --alluredir=./report/result
生成报告:allure generate ./report/result -o ./report/html

最终报告截图:

我这边只提供一个思路,如何做到公共类、公共方法实现
有问题,请在评论区留言

posted @ 2021-01-18 16:52  felixtester  阅读(513)  评论(0)    收藏  举报