• 13
  • 13
分享
  • 基于pytest的接口测试——软件测试圈
  • TIMI 2021-08-16 10:44:14 字数 1968 阅读 1752 收藏 13

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

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

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

1.png

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

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

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

2.jpg

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

3.jpg

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

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

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

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

4.jpg

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

5.png

调用命令:

6.png

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

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

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

7.jpg

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

下面是Dockerfile的配置

8.png

下面是jenkins中的Execute shell

9.jpg

需求三 拥有测试报告

测试报告使用的是Allure,主要是美观且配置简单,(参考:https://docs.qameta.io/allure/#_pytest)

step1:配置报告路径

10.png

step2:编写用例时,添加注释

11.jpg

step3:在jenkins中安装插件

12.png

step4:在job中配置报告路径

13.jpg

step5:在另一个job中添加执行计划

14.jpg

15.jpg

step6:查看报告

16.jpg

需求四:接口中某些字段值在每次请求中不重复

这里通过python的一个库factory-boy来实现该需求。

大概的原理就是将每个接口当做一个对象来处理,通过factory-boy给每个字段添加值,可以是固定值,也可以是随机值。然后将对象转成dict,并发送请求。

如下图中的红框部分字段,每次请求都将是不同的值。

17.jpg

18.jpg

需求五: 可以多接口关联测试

针对这个需求,实现的主要思路是,可以在一条Pytest用例中,拿到所有接口的请求和响应参数。

这里利用了pytest中fixture,将每个接口的http请求方法封装成fixture,后续传递给pytest用例使用。同理实现了 加载用例数据的Fixture

19.jpg

下面是用例数据,可以看到request中传递的是一个函数,函数执行后,可以拿到两个请求的请求参数。

20.jpg

下面的是pytest用例,可以看到用例中可以同时维护两个请求接口的请求参数和响应内容

这里例子比较简单,更新请求中,需要使用到添加响应中的data字段值。

21.jpg

需求六 构造的表数据可以和接口字段数据关联

有时候没有办法,通过其它接口的调用得到的信息,来为当前测试接口做数据入参。可偏偏需要在数据库中存在数据,才可以调用当前测试接口。

可以利用Factory-boy和sqlalchemy来实现这个需求。利用Factory-boy生成随机数据,利用sqlalchemy将数据入库。

例如下面pytest用例的红框部分,就是在插入数据,并使用数据中black_index,作为当前测试接口的请求入参

22.jpg

下面是CreateMBL函数的实现

23.png

下面是Factory-boy生成数据的代码

24.jpg

需求八 针对多样的响应内容,具备多样的断言方式

起初在用例的response中,只存放了一个dict,如下图,但是有时候响应内容(json格式)是多样的,需要断言的字段不一定都在json的顶层结构中,可能还会出现嵌套dict以及list的情况。

25.png

下面是我的实现。主要的思想就是根据不同的断言需求,传递给不同的断言方法。

1.png

用例中调用下面的函数,可以生成一批断言集合。

2.jpg

当断言需求类型是dict的时候,会调用下面的函数。

3.jpg

用例response编写,指定不同的断言需求

1.png

pytest 用例使用,如红框部分,结合上面的用例的断言需求,在用例执行时,实时传入实际响应内容。再遍历执行断言函数集合。就完成了多样的断言需求

2.jpg

作者:CC爱测试

原文链接:https://blog.csdn.net/waitingwww/article/details/119654397

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   欧盟委员会今天宣布,将对苹果、Google和 Meta 如何遵守其新的《数字市场法》反垄断规则展开五项违规调查。欧盟反垄断主管玛格丽特-维斯塔格(Margrethe Vestager)在一份声明中说:"我们怀疑这三家公司提出的解决方案并不完全符合《数字市场法》。我们现在将调查这些公司是否合法,以确保欧洲数字市场的开放性和可竞争性"。"  特别是,委员会计划调查Google和苹果在其应用商店中的反转向规则,以及Google是否在其搜索引擎中自我引用了自己的服务。苹果公司的 iOS 浏览器选择屏幕以及 Meta 公司的广告定向"付费或同意模式"...
            0 0 198
            分享
          •   张忠谋是半导体行业的传奇人物。这位美籍台湾商人和电气工程师于 1987 年创立了台积电,被誉为台湾整个半导体行业之父,时至今日,他仍在大胆预测未来。张忠谋最近表示,目前对人工智能硬件加速器的需求如此之高,以至于他的公司很快就要以惊人的速度倍增产能。  张忠谋是在台积电在日本熊本建立的位于该国第一家制造工厂的落成典礼上作出上述表示的,他期待着这个亚洲国家出现新的"芯片复兴"。  这位台积电创始人说,他与未具名的人工智能芯片公司代表进行了交谈,这些高管人物向这家台湾代工厂提出了一些前所未有的要求。张忠谋说:"他们说的不是数以万计的晶圆,而是希望台积电建立新的制造工...
            0 0 388
            分享
          • Robot Framework是一款Python编写的功能自动化测试框架,它是开源的。搭建了Python环境后,可以接着搭建Robot Framework。 Robot Framework 有几大特点:1)使用简单;2)非常丰富的库;3)可以像编程一样写测试用例;4)支持开发系统关键字。 以Windows环境为例,我们来安装Robot Framework: 1)  安装Python2.7:https://www.python.org/ (参考前面的分享《关于Python + Selenium...
            2 3 2723
            分享
          • 凡事了解一些性能测试的工程师,都知道要做好性能测试除了要会使用性能测试工具编写性能测试脚本外,更重要的两项工作是性能测试执行后,到底是否存在性能故障?以及存在性能故障的原因存在于何处?是网络原因、数据库原因、算法原因、硬件设备原因亦或是架构设计等等其他原因造成的呢?即使定位了性能故障,接下来如何对系统性能进行调优,使其满足用户的需求,这又是一大难点工作......而今天想和大家交流的是性能测试中最最有价值又最最容易被忽略的事情—性能需求及风险分析!我们先看一张图,下图是软件缺陷的修复费用示意图,大家一定都不陌生。从这张图中我们可以清楚的看出在后期bug修复的成本可能比需求阶段高出1000倍。那...
            1 2 1626
            分享
          • 大家好呀,我是阿常,昨天帅张广州分队邀请了嘉宾 lee、木木以及若坤关于「求职面试」进行线上分享,由于阿常当天有其他安排,所以只完整地听完了lee的分享,木木的分享阿常听了一部分,若坤的分享阿常没听到有些可惜。下面阿常把自己听到的部分内容做个总结:一、lee 的分享数据产品小lee一枚数据产品经理,分享工作日常,所思所想一)深度复盘,好好认识自己(分析自己)知道自己的特长,自己短期、长期的需求,匹配自己的需求。1、思考你的优势和劣势是什么,据此判断什么样的工作适合你2、想清楚你为什么要换工作,你未来 3~5 年的规划是怎样的二)了解市场需求、清除信息差(分析市场)分析市场最重要的就是...
            0 0 690
            分享
      • 51testing软件测试圈微信