当前位置: 首页 > news >正文

Python接口自动化测试之之request

「测试工程师必备技能」Python接口自动化测试教程!从基础到持续集成,一站式搞定,打造高薪自动化测试能力!

一、Python 之 request

主要方法解析 requests 是 python 实现的最简单易用的 HTTP 库,requests 库7 个主要方法:

 举例:普通接口测试的接口之间没有关联性,所以直接定义变量去发起get、post 请求即可。

 其中 POST 的请求常用的分为 json 和 formdata,两种方式请求的参数方式如截图所示;需要鉴权的,需要导入 auth 包,然后跟在请求方法后面。

 

1.url: 请求地址

2.data:字典,字节序列或文件对象,作为 Request 的内容

3.json: JSON 格式的数据,作为 Request 的内容

4.headers: 字典, HTTP 定制头

5.cookie: 字典或 CooKiJar, Request 中的 cookie

6.auth: 元祖,支持 HTTP 认证功能

7.files: 字典类型,传输文件

8.timeout: 设定超时时间,秒为单位

9.proxies: 字典类型,设定访问代理服务器,可以增加登录认证

10.allow_redirects: True/False,默认为 True,重定向开关

11.stream: True/False,默认为 True,获取内容立即下载开关

12.verity: True/False 默认 Ture,认证 ssl 证书开关

13.cert: 本地 ssl 证书路径

Response 返回方法详解:

1.response.status_code #返回的 http 响应状态码

2.response.content   #返回的是 bytes 型也就是二进制的数据

3.response.headers   # 返回的 http 请求头

4.response.json()   # 返回响应中的 Json 数据

5.response.url     # 返回 url

6.response.encoding   # 返回响应的编码格式

7.response.cookies   # 返回响应中的 cookie

8.response.text     #返回的是 Unicode 型的数据。---文本

Session 详解:

  对于需要前后接口依赖的接口测试,比如从上一个请求中获取token 用作下一个接口请求的参数去提交的话,用上面一种方法明显不合适,按照上面的方法需要定义很多变量,然后根据依赖去添加到对应的请求参数里,下面这种方法,使用session 会话的方式,贯穿前后,只要添加了一次,所有请求都能用到。(这里由于项目没有必要用到cookis,所以就放了个content-type和User-Agent)

 

import json
import warnings
import requests, unittestclass TestCase_auto003(unittest.TestCase):def setUp(self) -> None:# 解决错误 ResourceWarning: Enable tracemalloc to get the object allocation tracebackwarnings.simplefilter('ignore', ResourceWarning)self.s = requests.session()# dict = json.dumps({"mobile": "18673844852", "pwd": "123456"})# header = {"Accept": "*/*", "Accept-Encoding": "gzip, deflate, br", "Content-Type": "application/json",#           "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"}# rsp = self.s.post('http://192.168.1.173:28082/register/login/pws', data=dict, headers=header)# self.s.headers['Cookies'] = rsp.headers['Cookies']self.s.headers['User-Agent'] = "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Mobile Safari/537.36"self.s.headers['Content-Type'] = "application/json"def testcase_auto001(self):dict = json.dumps({"mobile": "18673844852", "pwd": "123456"})rsp = self.s.post('http://192.168.1.173:28082/register/login/pws', data=dict)print(rsp.text)self.assertEqual(200, rsp.status_code, msg='pass')def testcase_auto002(self):dict = json.dumps({"bid": 96497, "uid": 96497})rsp = self.s.post('http://192.168.1.173:28082/versions/dynamic/personal', data=dict)print(rsp.text)if rsp.status_code == 200:print("pass")else:print("fail")def tearDown(self) -> None:passif __name__ == "__main__":unittest.main()
解释: 
1.这个是 cynthia 缺陷管理系统,登录的时候需要拿到响应里的cookie 作为下一个请求的 cookie,不然登录不上。
2.所以在 unittest 结构中,可以把登录操作放到 setup 里面,类似UI 自动化一样,登录放在初始化中。 
3.在 setup 中把响应的 cookie 值,加入到请求的里面去了,同时添加了浏览器UA。
4.参数可以复用,从头到尾请求的变量都是 rsp,body 里的参数都是dict,编写简单方便。

1.定义一个变量 s 等于 requests 的 session 会话,后面都用这个s 的会话去发起请求。
2.定义一个变量等于 rsp 等于 s 去发起请求的结果。 
3.s 会话请求的头文件中 cookie 需要添加 tokenid,不然登录不上,这个id 在rsp响应信息里。 
4.因为响应信息是 json 字典格式,所以要添加到请求头里需要按照截图格式。
5.如果需要在字典中添加字段或者内容,按照截图的格式s.headers[‘xxx’]=“xxx”,如果字典中有这个 key:value,那么 value 值会直接更新,没有这个key 那么则会添加这个 key:value 到字典。接口实战 使用 session 添加 token 到头文件中 在公司实际项目中,调接口首先需要获取 token,要先调用获取token 的请求,然后拿到 token 值之后,在后面接口中添加到头文件中。

 

 self.session.headers.update({"token":rsp.json()['data']['token']})

通过在setup初始化方法中调用获取token,来拿到token的值,然后添加到整个session的 head 中去,后续请求中都不需要额外添加 head 了。

使用 ddt 对接口测试用例做参数化

ddt 数据驱动测试 首先 pip list ddt,安装第三方库,在代码最上方导入库中的data from ddt import ddt,data,在测试类前面声明 ddt,用@ddt

 1、在测试用例前声明使用 data,用@data

 

 运行结果中该用例执行了两次,分别输出的 test1 和 test2。

2、data 用法读取文件:

此方法需要解包,故需要用到 unpack 方法,在测试用例前声明@unpack 即可

 解释

1:定义一个读取文件的方法,定义一个 list 数组,使用file 函数的open 方法,读取文件名为“txt1”的文件,以 read 的形式,编码格式为 utf-8,以for 循环的方式一直循环读取每一行,以\n 换行符为一行结尾,以逗号分隔每一个参数,最后返回data 值以便下方直接调用。

2:上面写了读取方法之后,在测试用例前,直接使用该方法即可,@data(*readfile())这种形式,接着使用@unpack 解包的方法即可。

三、request+unittest+HTMLTestRunner 生成测试报告

按照上述的方法编写好测试用例后,结合 unittest 框架生成报告的HTMLTestRunner来生成接口测试报告。

四、总结

这一篇教程只是接口测试中的小试牛刀,后续还有太多需要学习的,requests 库也不光可以用来做接口测试,包括爬虫之类的也是可以的,技术之路上永无止境,我们测试人员也需要多多努力。

__EOF__

「测试工程师必备技能」Python接口自动化测试教程!从基础到持续集成,一站式搞定,打造高薪自动化测试能力!

http://www.lryc.cn/news/610378.html

相关文章:

  • SpringMvc跨域配置方法详解
  • Jmeter进行性能并发测试
  • 设计模式-创建型-工厂模式
  • Clion STM32CubeMX LED闪灯
  • CentOS卸载、安装MySQL8(yum操作)
  • 【QT】常⽤控件详解(三)常用按钮控件PushButton RadioButton CheckButton Tool Button
  • Kali基础知识点【2】
  • 查看 Java 字节码文件:jclasslib 的使用
  • C++高频知识点(十四)
  • 文件包含篇
  • Linux中netstat详细使用指南
  • MySQL偏门但基础的面试题集锦
  • webm 读取解析
  • 并发编程常用工具类(上):CountDownLatch 与 Semaphore 的协作应用
  • Linux 使用 firewalld :开放端口与常用操作指南
  • 【机器学习】(算法优化二)提升算法之:AdaBoost与随机梯度
  • C++多线程同步:深入理解互斥量与事件机制
  • 【node】token的生成与解析配置
  • 笔试——Day28
  • 我用一个 Postgres 实现一整套后端架构!
  • LeetCode 分类刷题:16. 最接近的三数之和
  • 【Unity】协程 Async
  • 体育数据创业:用 API + 比分网,低成本快速验证
  • Mirror学习笔记
  • Linux RAID 存储技术
  • GaussDB 数据库架构师(十二) 资源规划
  • 用户与组管理命令
  • 小实验:按键点灯(中断法)
  • 【笔记】ROS1|5 ARP攻击Turtlebot3汉堡Burger并解析移动报文【旧文转载】
  • traefik网关鉴权中间件转发multipart/form-data请求的multipart: NextPart: EOF问题