2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完

一、目前软件测试的市场行情以及测试人员能力标准。
这两天我听了几个去京东、平安银行,阿里等大厂的招聘录音:总结一下:
一般这些大厂业务测试:5-6成,接口,自动化,性能:4-5成,流程规范:1成
从上面的需求我们不难看出目前市面上对测试人员的要求:综合型的测试人才,侧重业务能力(京东是小B端业务,平安银行信用卡业务),代码能力(在自动化框架这一块有一定的建树)以及开发思维
(代码的封装能力)。
而接口测试或者接口自动化是每一个面试中都必问的环节。比如:(只口述,不打字) 1.主流接口测试工具: Postman+Newman+Jenkins持续集成接口自动化(基于Javascript语言) Jmeter+Ant+Jenkins持续集成接口自动化(基于Java语言)
Apifox+Apifox-cli+Jenkins持续集成接口自动化(基于Javascript语言)
2.接口自动化测试以及接口自动化测试平台:(一般适用于大中型的项目或者公司) python+requests+pytest+yaml+allure+logging+jenkins接口自动化。
开发自动化测试平台。
既然我们有postman,jmeter,apifox等工具都可以实现接口测试,为什么我们要封装框架或者是开发测试平台? 工具弊端如下: 1.敏捷开发接口数量巨大,如何实现团队合作和版本控制(如果是联网协作,安全问题?)。
2.功能太死板,有些接口功能难以实现(比如说:自定义加密,RSA加密,签名等)。
3.当接口项目当中出现了多种协议的接口。
4.没有办法生成美观的测试报告以及日志监控的实现。
5.框架或平台可以自定义功能并推广到所有的项目中复用。
基于目前的市场形式以及行业需求,所以从今天开始我们就和大家讲三天的接口自动化VIP课程,希望对大家找工作和跳槽有所帮助,同时也希望大家能够认真的学完并且动手实践起来。
二、全面熟练Requests库以及底层方法调用逻辑 1.requests库是用来发送HTTP请求,接收HTTP响应的Python第三方库,主要用于做接口自动化测试,使用前需要安装:
2. 详解Requests模块常用方法:
1
def get(url, params=None,
2 url:接口请求地址
**kwargs): 发送get请求
3 params:是get请求用于传参,这个参数会自动的以?的方式加到url之后,多个参数之间用&分割。
4 **kwargs:可变长度字典参数
5
6 def post(url, data=None, json=None, **kwargs): 发送post请求
7 data:用于传参
8 json: 用于传参
9 files: 文件上传
10
11 基于Postman:
12 form-data: 既有表单参数也有文件上传 files
13 Content-Type:multipart/form-data
14 x-www-form-urlencoded 表单 data
15 Content-Type:application/x-www-form-urlencoded (data)
16 raw: json(json),xml(data),text(data)
17 Content-Type:application/json (json)
18 Content-Type:text/plain (data)
19 Content-Type:application/javascript (data)
20 Content-Type:text/html (data)
21 Content-Type:application/xml (data)
22 binay:二进制文件上传(data)
23 Content-Type:application/octrent-stream (data)
24
25 def put(url, data=None, **kwargs): 发送put请求
26 def delete(url, **kwargs): 发送delete请求
27
28 requests模块下的:
29 def request(method, url, **kwargs): 发送任意请求/它是get,post,put,delete的底层方法。
30
31 def session(): 获得一个session对象
32 session对象的:
33 def request( session对象的request方法
34 self,
35 method, 请求方式 get post put delete
36 url, 请求URL地址,接口文档标准的接口请求地址
37 params=None, params参数:请求数据中的链接,常见的一个get请求,请求参数都是放在url地址
38 data=None, data参数:请求数据,参数为表单的数据格式
39 json=None, json参数:接口常见的数据请求格式
40 headers=None, 请求头:请求头信息 ,http请求中,编码方式等内容的添加
41 cookies=None, cookie信息:保存用户的登录信息。比如做一些充值功能,但是需要用户已经登录
42 files=None, 文件上传
43
44 auth=None, 鉴权的意思,接口设置操作权限
45 timeout=None, 超时处理
46 allow_redirects=True, 重定向,请求不成功,再次请求(该功能并不是很常用)
47 proxies=None, 设置代理
48 hooks=None, 钩子
49 stream=None, 文件下载功能,通过请求方式,下载文件,进行验证
50 verify=None, 证书验证 1.要么请求忽略证书 2.要么加载证书地址
51 cert: CA证书
52 ):
53
54 requests.request()和session.request()的区别在于:
55 前者的每个请求都是独立,后者会自动的关联所有的请求的cookie信息(类似于jmeter的http cookie管理器
3. requests模块中的response对象的属性和方法 编写一个简单的get案例之后讲解Response对象。
使用requests方法后会返回一个Response对象,存储服务器的返回信息。Response返回信息如下:
三、Requests接口自动化测试实战 1.get请求接口 2.get请求接口(需要接口关联) 3.post请求接口(包括json传参和data传参) 4.文件上传接口
5.访问phpwind首页接口(正则表达式应用) 6.登录phpwind接口(包括:请求头,cookie鉴权,session鉴权)
1
class TestApi:
2
3 #类变量
4 access_token = ""
5 csrf_token = ""
6 session = requests.session() #创建会话对象
7
8 #get请求接口
9 def test_get_token(self):
10 urls = "https://api.weixin.qq.com/cgi-bin/token"
11 datas = {
12 "grant_type":"client_credential",
13 "appid":"wx6b11b3efd1cdc290",
14 "secret":"106a9c6157c4db5f6029918738f9529d"
15 }
16 res = requests.get(url=urls,params=datas)
17 result = res.json()
18 TestApi.access_token = result["access_token"]
19 print(result["access_token"])
20 #在第一个接口里面获取到access_token鉴权码
21
22 #get请求接口(需要接口关联)
23 def test_select_flag(self):
24 urls = "https://api.weixin.qq.com/cgi-bin/tags/get"
25 datas = {
26 "access_token": TestApi.access_token
27 }
28 res
= requests.get(url=
urls, params=
datas)
29 print(res.json())
30
31 #post请求接口(包括json传参和data传参)
32 def test_edit_flag(self):
33 urls = "https://api.weixin.qq.com/cgi-bin/tags/update"
34 ps = {
35 "access_token": TestApi.access_token
36 }
37 datas = {"tag":{"id":7206,"name":"beibei"+str(int(time.time()))}}
38 res = requests.post(url=urls,data=json.dumps(datas),params=ps)
39 print(res.json())
40
41 #文件上传接口
42 def test_file_upload(self):
43 urls = "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token="+TestApi
44 datas = {
45 "media":open(r"E:\shu.png","rb")
46 }
47 res = requests.post(url=urls,files=datas)
48 print(res.json())
49
50 #访问phpwind首页接口(正则表达式应用)
51 def test_phpwind(self):
52 urls = "http://47.107.116.139/phpwind"
53 #res = requests.get(url=urls)
54 res = TestApi.session.get(url=urls)
55 result=res.text
56 TestApi.csrf_token = re.search('name="csrf_token" value="(.*?)"',result).group(1
57 print(TestApi.csrf_token)
58
59 #登录接口(包括:请求头,cookie鉴权,session鉴权)
60 def test_login(self):
61 urls= "http://47.107.116.139/phpwind/index.php?m=u&c=login&a=dorun"
62 datas = {
63 "username":"admin",
64 "password":"msxy",
65 "csrf_token":TestApi.csrf_token,
66 "backurl":"http://47.107.116.139/phpwind/",
接口关联必用的三种方式以及对应python库详解:
1.通过类变量保存中间变量实现接口关联。
2.通过单独的文件保存中间变量实现接口关联。
3.极限封装成零代码方式提取和使用实现接口关联。
(1) 正则提取(正则只能够提取字符串的数据) re.seach:只匹配一个值,通过下标[1]取值,没有匹配到返回None re.findall:匹配多个值,返回列表list,多个值通过下标取值,没有匹配到返回None
(2) JsonPath提取(jsonpath只能够提取json格式的数据)
jsonpath.jsonpath,返回的是一个列表,通过下标取值,没有找到返回None
语法规则:
(1) $ 根节点
(2) .或者[] 用于获取子节点的对象。如:
$.jiaoyu
$["mashang"]
区别在于[]的方式它的功能更强大,它可以同时取多个节点:如:
$["mashang","jiaoyu"]
(3) .. 表示通过相对路径取值,通过递归取值。
$..name
(4) * 通配符
$.* 匹配到根节点下所有的节点的值。
$..* 递归匹配到根节点下所有的对象或者。
(5) 数组的处理方式,它是通过[]来处理,如:
$.mashang[0].student[1].name 0代表取数组的第1个值。 切片取值:从start(包含)开始到end(不包含)结束。如:
$.mashang[1:3] 下标从1开始到2
$.mashang[:3] 下标从0开始到2
$.mashang[1:] 下标从1开始到最后的下标
$.mashang[-2:-1] -1是倒数第1个,-2倒数第2个。
四、接口自动化框架封装:
目的:简化接口自动化的落地实施,统一化,标准化,企业期望达到:不懂代码的团队也能够通过框架实现接口自动化测试。
(1)、接口自动化统一请求封装为什么需要封装统一接口请求: 1.去除重复的,冗余的代码。
2.实现统一的异常处理和日志监控。封装代码如下: