接口自动化测试:pytest基础讲解

为什么要做接⼝测试?

只靠前端测试很难确保很⾼的覆盖率。接⼝测试,可以模拟出各种类型的⼊参,包括⼀些在前端模拟不出来的⼊参,还能根据接⼝⽂档的定义,设计出相对完善的⼊参值,在接⼝层保证质量,剩余的绝⼤多数问题就是应⽤程序⾃⾝的交互和数据展⽰问题。

接⼝测试相对于交互界⾯测试和功能测试来说,更容易实现⾃动化,执⾏起来⽐较稳定,维护成本也⽐较低。

接⼝⾃动化适⽤于回归测试、线上接⼝巡检等,可以减少⼈⼯回归测试的⼈⼒成本、也可以监控线上接⼝健康情况。

前、后端系统分离,从安全层⾯来说,只依赖前端进⾏不能满⾜安全要求,绕过前端相对容易,所以需要后端同样进⾏输⼊校验,可以依赖接⼝测试去验证了。

⼀、接⼝测试流程

1. 如何测试接⼝ ?

怎么测试接⼝?根据什么来测接⼝呢?这就需要开发提供的接⼝⽂档了,接⼝⽂档和功能测试的需求说明书的功能是⼀样的。包括:接⼝说明、调⽤的url,请求⽅式(Get or Post orRPC协议的框架,Doubbo接⼝协议),请求参数、参数类型、请求参数说明,返回结果说明。有了接⼝⽂档后,我们就可以设计接⼝测试⽤例,⼀般接⼝测试的⽤例编写可以从以下⼏个⽅⾯进⾏:

2. 接⼝⿊盒⽩盒的测试⽅法

◦ 接⼝通过性验证(最基本的)

▪ 传递正确的参数,是否返回正确的结果。

◦ 参数组合验证

▪ 因为参数有必传和⾮必传,

▪ 参数的类型和⻓度,

▪ 以及传递时可能业务上的⼀些限制,

▪ 测试参数的排列组合,保证所有的情况都能覆盖到,

◦ 接⼝的安全性&异常验证

例如绕过验证,⽐如提交订单时,在传递商品价格参数时,修改商品价格,看后端是否做了校验,或者⽀付时,修改订单⾦额,如果能以改之后的⾦额⽀付,这个接⼝就是有问题了。

绕过⾝份验证,就是某个功能只有特殊权限的⽤⼾才能操作,那我穿⼀个普通的⽤⼾,是不是也能操作。

参数是否加密,这个关系到⼀些账号的安全,⽐如我们登录⼀些⽹站时,他要将我们的登录信息进⾏加密。

▪ 密码安全规则,设置密码时复杂程度的校验。

▪ 订单幂等的校验,两个同⼀订单号的订单是否能提交⽀付

▪ 修改⽀付订单的⽀付状态

▪ 异常测试(try catch测试)

▪ 逻辑或、逻辑与的测试

▪ 接⼝参数边界测试0和负数 还有int最⼤值等等;

◦ 根据业务逻辑来设计⽤例

▪ 符合业务逻辑的意思是指,此接⼝包含了这个功能逻辑的所有应⽤场景;

▪ 与其他业务接⼝业务的组合,排除对其他业务的影响;

3. 测试分析

◦ 接⼝测试范围&优先级

◦ 独⽴接⼝测试分析

◦ 联调接⼝测试分析

◦ 接⼝测试框架分析

◦ 涉及到问题:

▪ 没有接⼝测试设计⽂档怎么办

▪ 接⼝设计⽂档⾮常粗糙怎么办

▪ 接⼝设计⽂档看不懂怎么办

4. 冒烟测试

◦ ⼯具选择,postman

◦ 如何使⽤⼯具进⾏冒烟测试,postman使⽤

◦ 冒烟测试标准制定

▪ 新的项⽬,冒烟测试标准制定不要过⾼

▪ 所有待测功能正常使⽤,流程都能通过

5. 接⼝测试脚本编写

◦ 常量参数

◦ 变量参数

◦ 循环处理测试数据

◦ 对接⼝请求回的结果做assert断⾔

◦ 通过⽂件提取测试数据

6. ⼯作总结

◦ 接⼝测试流程总结

◦ 接⼝测试技术总结

▪ 导⼊库⽂件

▪ 发送接⼝请求

▪ 输⼊常量查询条件

▪ 获取接⼝返回结果

▪ 预期输⼊与实际结果⽐对

◦ 接⼝测试⼯作总结

⼆、postman接⼝测试

1. 接⼝的概念

输⼊与输出的验证

2. 接⼝组成

https://svr-6-9008-api.share.51env.net/v1/article/view?id=1

◦ 协议 https

◦ 域名 svr-6-9008-api.share.51env.net

◦ 端⼝号

◦ 路径 /v1/article/view?

◦ 参数 id=1

3. 接⼝的要素

◦ 请求地址 url

◦ 请求⽅法 get/post/rpc/doubbo协议等等;

◦ 请求参数 id

◦ 响应

4. postman接⼝测试

◦ 接⼝⽤例测试

◦ 请求成功

◦ 断⾔/检查

▪ 响应结果断⾔

▪ 响应数据断⾔

▪ 响应时间

三、pytest框架

1. 接⼝测试python常⽤的俩个框架区别

◦ unittest框架必须遵守需要遵守以下规则

▪ 测试⽂件必须先import unittest

▪ 测试类必须继承unittest.TestCase

▪ 测试⽅法必须以"test_"开头

▪ 测试类必须要⽤unittest.main()⽅法

pytest是python的第三⽅测试框架,是基于unittest的扩展框架,⽐unittest更简洁,更⾼效。使⽤pytest必须遵守以下规则

▪ 测试⽂件名必须以"test_"开头,或者"test_"结尾

▪ 测试⽅法必须以"test_"开头

▪ 测试类命名必须以"Test"开头

2. pytest测试框架安装

3. pytest切换


4. 测试case编写

5. 接⼝⾃动化报告⽣成

◦ ⾸先安装allure:https://www.cnblogs.com/Durant0420/p/15867983.html

◦ 然后allure的使⽤

• pytest --alluredir=report 执⾏测试⽂件中的⽤例

• allure generate report --clean ⽣成测试报告,--clean覆盖之前的报告

6. 接⼝测试过程

◦ 导⼊库⽂件

◦ 发送接⼝请求

◦ 输⼊常量查询条件

◦ 获取接⼝返回结果

◦ 预期输⼊与实际结果⽐对

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关推荐
_OLi_6 分钟前
力扣 LeetCode 459. 重复的子字符串(Day4:字符串)
算法·leetcode·职场和发展·kmp
Xiao Fei Xiangζั͡ޓއއ1 小时前
一觉睡醒,全世界计算机水平下降100倍,而我却精通C语言——scanf函数
c语言·开发语言·笔记·程序人生·面试·蓝桥杯·学习方法
_OLi_1 小时前
力扣 LeetCode 150. 逆波兰表达式求值(Day5:栈与队列)
算法·leetcode·职场和发展
糊涂君-Q3 小时前
Python小白学习教程从入门到入坑------第三十一课 迭代器(语法进阶)
python·学习·程序人生·考研·职场和发展·学习方法·改行学it
ayyyy____3 小时前
pytest执行用例时从conftest.py抛出ModuleNotFoundError:No module named ‘XXX‘异常的解决办法
pytest
_可乐无糖5 小时前
pytest中的断言
python·pytest
路遇晚风5 小时前
力扣=Mysql-3322- 英超积分榜排名 III(中等)
mysql·算法·leetcode·职场和发展
吾店云建站16 小时前
WordPress 6.7 “Rollins”发布
科技·程序人生·职场和发展·创业创新·程序员创富
Sunyanhui119 小时前
力扣 二叉树的直径-543
算法·leetcode·职场和发展
幸运的星竹19 小时前
使用pytest+openpyxl做接口自动化遇到的问题
python·自动化·pytest