基于pytest的接口测试

最近要开展接口测试,起初打算使用公司已有的Fitnesse测试工具来进行接口测试。过程中发现,构造接口字段数据、测试数据都比较困难,接口参数多的时候,用例量就会很多,关键执行速度还慢。所以放弃了。

找了一些其它工具,都不太能解决数据构造困难的问题。找不到工具,就直接使用代码来实现。考虑到代码量,结合网上的一些推荐,决定使用python+pytest来编写接口自动化用例。

决定了语言和框架,接下来要考虑一下实现需求。

1.一套用例可以测试多套环境

2.可以被jenkins调度执行

3.拥有测试报告

4.接口中某些字段值在每次请求中不重复

5.可以多接口关联测试

6.构造的表数据可以和接口字段数据关联

7.pytest用例和实际用例数据要分离,方便维护

8.针对多样的响应内容,具备多样的断言方式。

 需求一:一套用例可以测试多套环境

公司的测试环境不止一套,希望在使用接口自动化用例时,可以随意的切换被测环境。

为了满足这个需求,首先要完成接口地址等信息的独立配置,而且是要按照一套环境的维度去管理信息。

 我的做法如上图,首先我给每套环境设置了一个别名,比如上图中的lion环境,然后设计了一个服务去持久化变量值信息(变量名称所有环境保存一致)。

接着将环境名称和变量名称,组合起来,保存到redis中(如上图),供后续接口自动化用例读取并使用。

环境信息搞定之后,接下来的任务就是,设计一种方法让接口自动化用例使用环境信息。

这里采用的方法是,在执行时,指定环境别名。

pytest的用例有多种执行方式,这里使用pytest.main()来启动,通过将pytest.main()写入一个py文件中,如下面代码。

 
 
memberCenter.py

1
if __name__ == "__main__": 2 if (len(sys.argv) == 2): 3 _, env = sys.argv 4 else: 5 env = 'lion' 6 BaseUtil.initTest(env) 7 pytest.main(['--alluredir=./allure-results', '--maxfail=5','-s','-rA', 'testcase/membercenter/'])

 启动时,接受一个参数env,并将env作为属性添加到Context中,供用例使用。

BaseUtil.py
from context import Context as ct
def initTest(env):
 ct.env = env 

调用命令:

 这里就指定了测试环境的别名为lion。

有了环境别名,再加上统一的变量名称,就可以使用下面的方式,去redis获取对应的变量值了。

 以上就实现了多环境测试的需求。后续只要维护好环境别名、变量名称和变量值就可以了。

需求二: 可以被jenkins调度执行

这个比较简单,通过参数化构建就可以。

 不过为了不影响Jenkins所在服务器,我使用了docker去执行用例

下面是Dockerfile的配置

 下面是jenkins中的Execute shell

 1 echo "清除历史报告记录"
 2 cd ${WORKSPACE}
 3 cd allure-report && rm -rf *
 4 cd ${WORKSPACE}
 5 cd allure-results && rm -rf *
 6 
 7 echo "开始执行命令"
 8 cd ${WORKSPACE}
 9 
10 function del_ci {
11   echo "$1"
12   docker stop chbifacetest
13   docker rm chbifacetest
14   docker rmi hbifacetest:1.1
15 }
16 
17 docker inspect --format '{{.State.Running}}' chbifacetest && del_ci "删除容器和镜像"
18 
19 
20 docker build -t hbifacetest:1.1 .
21 docker run  -v ${WORKSPACE}/allure-results:/usr/local/hbifacetest/allure-results -v ${WORKSPACE}/allure-report:/usr/local/hbifacetest/allure-report --name chbifacetest hbifacetest:1.1 ${pymainfile} ${testEnv}
22 echo "执行结束"

 需求三  拥有测试报告

 更新中

猜你喜欢

转载自www.cnblogs.com/moonpool/p/11649996.html
今日推荐