欢迎光临散文网 会员登陆 & 注册

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

2023-04-02 21:47 作者:码尚软件测试平台  | 我要投稿

一、目前软件测试的市场行情以及测试人员能力标准。

这两天我听了几个去京东、平安银行,阿里等大厂的招聘录音:总结一下:

一般这些大厂业务测试: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模块常用方法:

 


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鉴权)

 

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.实现统一的异常处理和日志监控。封装代码如下:

 



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

分享到微博请遵守国家法律