最近要开展接口测试,起初打算使用公司已有的Fitnesse测试工具来进行接口测试。过程中发现,构造接口字段数据、测试数据都比较困难,接口参数多的时候,用例量就会很多,关键执行速度还慢。所以放弃了。
找了一些其它工具,都不太能解决数据构造困难的问题。找不到工具,就直接使用代码来实现。考虑到代码量,结合网上的一些推荐,决定使用python+pytest来编写接口自动化用例。
决定了语言和框架,接下来要考虑一下实现需求。
需求一:一套用例可以测试多套环境
公司的测试环境不止一套,希望在使用接口自动化用例时,可以随意的切换被测环境。
为了满足这个需求,首先要完成接口地址等信息的独立配置,而且是要按照一套环境的维度去管理信息。
我的做法如上图,首先我给每套环境设置了一个别名,比如上图中的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 "执行结束"
需求三 拥有测试报告
更新中