当前位置:网站首页>看腾讯大老如何做接口自动化测试
看腾讯大老如何做接口自动化测试
2022-07-04 19:06:00 【小梧敲代码】
一、自动化分类
(1)接口自动化
python/java+requests+unittest框架来实现 python/java+RF(RobotFramework)框架来实现——对于编程要求不高
(2)Web UI功能自动化
python/java+selenium+unittest+ddt+PO框架来实现 python/java+RFS(RobotFrameWork+Selenium)框架来实现——对于编程要求不高
(3)App自动化
python/java+appnium+unittes框架来实现 python/java+RF(RobotFramework)框架来实现——对于编程要求不高
二、接口自动化与Web自动化的区别
(1)接口自动化是没有界面的,不需要对界面元素定位操作,不需要考虑界面延迟的问题,执行效率更高 (2)接口自动化用的是requests测试库,Web自动化用的selenium测试库 (3)接口自动化的覆盖率可以达到100%(绝大部分的接口都可以实现自动化) Web自动化的覆盖率能达到80-90%算OK(可能会有某些功能是没办法实现自动化的)
三、怎么做接口自动化
1、流程
A. 确定业务范围,哪些业务功能的接口可以做自动化——接口自动化的覆盖率可以达到 100%
B. 时间进度安排,人员分配
C. 确定自动化测试框架
D. 准备数据——准备接口用例数据
E. 编写接口自动化脚本
2、搭建接口自动化测试环境
(1)、安装python3.x——配置python的环境变量
(2)、安装PyCharm——python开发工具
(3)、安装测试库 Requests库—— 提供了丰富的用来发请求,对请求进行处理的API函数 xlrd,xlwt库—— 提供了对Excel文件进行操作的API函数 Pymysql库—— 提供了对Mysql数据库进行操作的API函数 paramsunittest库—— 实现参数化的库 Json库—— 提供了对Json格式的数据进行操作的API函数(python自带的基础库) Re库—— 可以使用这个库中的API函数对HMTL数据进行操作
3、准备数据——准备接口用例数据
我们把接口用例数据放入在Excel表格中,因为每一个接口都包含:请求地址,请求方式,请求参数,以及响应数据;所以在Excel表格中按照以下方式来组织我们的接口用例数据,包含以下几个内容: 用例名称,请求地址,请求方式,请求头,请求参数,预期结果(断言) 然后我们会封装一个函数去读取Excel数据,以参数的形式传递到脚本中,具体操作步骤如下:
4、编写自动化测试脚本
1、步骤:
A、导包
import requests
B、组织请求参数
url = ‘http://localhost/fw/index.php?ctl=user&act=dologin&fhash=hbUjHVrQIgHkwdMdNGnPrSiIkVBeWcrOvJpmsXgyNuMewKfKGy’
par = {
‘email’: ‘Jason’,
‘user_pwd’: ‘TWlKaGRrRFJrQXJZZlFXYkh5WlNQZ2tpZkFZQlVlUUhyRE5SdndSUGdKanFDTG1LYUYlMjV1NjVCOSUyNXU3RUY0emdwMTIzNDU2JTI1dThGNkYlMjV1NEVGNg==‘,
‘auto_login’: 0,
‘ajax’: 1
}
C、发送请求
res = requests.post(url, data=par)
res = requests.get(url,params=par)
D、提取响应对象中的数据,并做断言
1、提取响应*body*内容**
res.text —— 如果返回的是html格式的数据,使用res.text提取` res.json() —— 如果后台返回的是json格式的数据,则使用这个API函数来提取`
2、提取响应头***
res.headers
3、提取状态码,响应信息
res.status_code
res.reason
4、提取cookie值
res.cookies()
2、传递请求头
header = {
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0’,
‘Accept’: ‘application/xml’,
}
res = requests.post(url,data=par,headers=header)
3、传递cookie,token值
通过请求头来传递 —— 直接从浏览器上查看cookie值,并传递到后台。
header = {
‘Cookie’: ‘PHPSESSID=3724b412550a557825da5528dd6198c6’
}
res = requests.post(url,data=par,***headers=heade***r,allow_redirects=False)
发请求的时候通过cookies这个参数来传递
import requests
#1. 登录,获取cookie值
def getCookie():
url = ‘http://localhost/fw/index.php?ctl=user&act=dologin&fhash=hbUjHVrQIgHkwdMdNGnPrSiIkVBeWcrOvJpmsXgyNuMewKfKGy’
par = {
‘email’: ‘Jason’,
‘user_pwd’: ‘TWlKaGRrRFJrQXJZZlFXYkh5WlNQZ2tpZkFZQlVlUUhyRE5SdndSUGdKanFDTG1LYUYlMjV1NjVCOSUyNXU3RUY0emdwMTIzNDU2JTI1dThGNkYlMjV1NEVGNg==‘,
‘auto_login’: 0,
‘ajax’: 1
}
res = requests.post(url, data=par)
return res.cookies
#2. 调用充值接口
#2.1 获取cookie值
cookie = getCookie()
#2.2 发充值请求
url = ‘http://localhost/fw/member.php?ctl=uc_money&act=incharge_done’
par = {
‘check_ol_bl_pay’:’on’,
‘money’:1000,
‘bank_id’:0,
‘memo’:234567890,
‘payment’:5,
}
#发充值请求
res1 = requests.post(url,data=par,cookies=cookie,allow_redirects=False) # 自动重定向的,可以取消自动重定向
print(res1.status_code)
print(res1.reason)
print(res1.headers)
先创建一个session对象,所有请求都使用这个session对象来发送
import requests
#1. 发登录请求
url = ‘http://localhost/fw/index.php?ctl=user&act=dologin&fhash=hbUjHVrQIgHkwdMdNGnPrSiIkVBeWcrOvJpmsXgyNuMewKfKGy’
par = {
‘email’: ‘Jason’,
‘user_pwd’: ‘TWlKaGRrRFJrQXJZZlFXYkh5WlNQZ2tpZkFZQlVlUUhyRE5SdndSUGdKanFDTG1LYUYlMjV1NjVCOSUyNXU3RUY0emdwMTIzNDU2JTI1dThGNkYlMjV1NEVGNg==‘,
‘auto_login’: 0,
‘ajax’: 1
}
#创建一个seesion对象,后期使用这个session对象来发请求
ses = requests.session()
#发登录请求,返回的cookie值会自动化保存到session对象中
response1 = ses.post(url,data=par)
#2. 发充值请求
url = ‘http://localhost/fw/member.php?ctl=uc_money&act=incharge_done’
par = {
‘check_ol_bl_pay’:’on’,
‘money’:1000,
‘bank_id’:0,
‘memo’:234567890,
‘payment’:5,
}
response2 = ses.post(url,data=par,allow_redirects=False)
print(response2.headers)
5、工程管理维护与优化
(1)、数据驱动——实现接口用例数据与脚本的分离 我们把接口用例数据放入在Excel表格中,因为每一个接口都包含:请求地址,请求方式,请求参数,以及响应数据;所以在Excel表格中按照以下方式来组织我们的接口用例数据,包含以下几个内容: 用例名称,请求地址,请求方式,请求头,请求参数,预期结果(断言) 然后我们会封装一个函数去读取Excel数据,以参数的形式传递到脚本中,具体操作步骤如下:
安装xlrd库
pip install xlrd
调用xlrd库中的API函数来实现对Excel表格数据的读取
#封装一个读取Excel表格数据的函数
#对Excel表格数据的读取需要用到一个库——xlrd库
import xlrd
def get_data(filename,sheetname):
#1. 打开Excel文件
workbook = xlrd.open_workbook(filename)
#2. 打开Excel文件中的某张表
sheet = workbook.sheet_by_name(sheetname)
#3. 读取表中的内容
list = []
for I in range(1,sheet.nrows):
data = sheet.row_values(i)
list.append(data)
return list
if __name__==‘__main__’:
result = get_data(‘D:\\JMeter\\1947_Project\\cxy-project02\\data\\接口用例数据.xls’,’登录’)
print(result)
问题解决1
工程问题:
1、没有安装xlrd
2、没有把xlrd导入工程
(2)、unittest框架 作用:用来管理用例,加载用例,执行用例 原理:有几个核心组件 1、测试固件 setUp() 每条用例执行之前,首先会执行这个setUp()方法,在setUp()方法中完成准备初始化工作 比如:连接数据库,后期在将Web UI功能自动化的时候,可以在这里去打开浏览器,配置 tearDown() 每条用例执行完成之后,回收一些资源,比如:关闭数据库,关闭浏览器 2、测试用例 每一条用例需要实现一个用例方法,每个用例方法都必须要以test开头 3、测试套件 执行用例的时候,需要创建测试套件,把用例加入测试套件。 4、加载器 用来加载用例的,把测试用例加入测试套件中 5、执行器 用来执行测试套件中的用例的 如何使用unittest框架来编写用例
#1. 导包
import time
import unittest
import requests
from common.excelUtils import get_data
import paramunittest
#读取excel表格中的数据
list = get_data(‘D:\\JMeter\\1947_Project\\cxy-project02\\data\\接口用例数据.xls’,’登录’)
#2. 定义一个类,去继承unittest.TestCase
@paramunittest.parametrized(*list) # 引用list中的所有数据
class FwLogin(unittest.TestCase):
def setParameters(self,case_name,url,method,headers,params,assert_info):
‘’’
有多少条用例,这个函数就会执行多少次,每执行一条用例之前先会执行这个函数,把数据提取出来。
:param case_name:
:param url:
:param method:
:param headers:
:param params:
:param assert_info:
:return:
‘’’
self.case_name = str(case_name)
self.url = str(url)
self.method = str(method)
self.headers = str(headers)
self.params = str(params)
self.assert_info = str(assert_info)
#1. 实现一个用例方法
def test_login_case(self):
time.sleep(5)
#1. 组织参数
self.headers= eval(self.headers) # 将字符串转化为字典
self.params = eval(self.params)
#2. 发请求
if self.method == ‘POST’:
response = requests.post(self.url,data=self.params,headers=self.headers)
else:
response = requests.get(self.url,params=self.params,headers=self.headers)
#3. 检查,断言
self.check_result(response)
def check_result(self,response):
‘’’
断言 检查结果的
:param response:
:return:
‘’’
self.assert_info = eval(self.assert_info) #预期结果
try:
self.assertEqual(response.status_code,200,’响应状态码错误’)
self.assertEqual(response.reason,’OK’,’响应的响应码错误’)
self.assertDictEqual(response.json(),self.assert_info,’响应的正文内容不一致!’)
print(‘%s测试用例通过!’ %self.case_name)
except AssertionError as e:
print(‘%s测试用例不通过!%s’ %(self.case_name,e))
if __name__ == ‘__main__’:
unittest.main()
最后感谢每一个认真阅读我文章的人,下面这个网盘链接也是我费了几天时间整理的非常全面的,希望也能帮助到有需要的你!

这些资料,对于想转行做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……
如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以点击下方小卡片加入我们群,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。
| 点击文末小卡片领取 |
敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。
自学推荐B站视频:
零基础转行软件测试:25天从零基础转行到入职软件测试岗,今天学完,明天就业。【包括功能/接口/自动化/python自动化测试/性能/测试开发】
边栏推荐
- Actual combat simulation │ JWT login authentication
- Talking about cookies of client storage technology
- Detailed explanation of Audi EDI invoice message
- Flet教程之 06 TextButton基础入门(教程含源码)
- Key rendering paths for performance optimization
- #夏日挑战赛#带你玩转HarmonyOS多端钢琴演奏
- Length of the longest integrable subarray
- 奏响青春的乐章
- NLP, vision, chip What is the development direction of AI? Release of the outlook report of Qingyuan Association [download attached]
- Installation and use of VMware Tools and open VM tools: solve the problems of incomplete screen and unable to transfer files of virtual machines
猜你喜欢

Key rendering paths for performance optimization

复杂因子计算优化案例:深度不平衡、买卖压力指标、波动率计算
![Regular replacement [JS, regular expression]](/img/66/abfe0bd6050b7266ad269d655be644.png)
Regular replacement [JS, regular expression]

电脑页面不能全屏怎么办?Win11页面不能全屏的解决方法

QT writing the Internet of things management platform 38- multiple database support

太方便了,钉钉上就可完成代码发布审批啦!
Practical examples of node strong cache and negotiation cache
![NLP、视觉、芯片...AI重点方向发展几何?青源会展望报告发布[附下载]](/img/79/82763392e74d102921b4e8e601d4c6.png)
NLP、视觉、芯片...AI重点方向发展几何?青源会展望报告发布[附下载]

Free soldier

Wireshark network packet capture
随机推荐
Common verification rules of form components -1 (continuously updating ~)
Jiuqi ny8b062d MCU specification /datasheet
What financial products can you buy with a deposit of 100000 yuan?
C server log module
Flet教程之 07 PopupMenuButton基础入门(教程含源码)
实践示例理解js强缓存协商缓存
复杂因子计算优化案例:深度不平衡、买卖压力指标、波动率计算
go语言笔记(4)go常用管理命令
In operation (i.e. included in) usage of SSRs filter
Key rendering paths for performance optimization
Regular replacement [JS, regular expression]
精选综述 | 用于白内障分级/分类的机器学习技术
Template_ Judging prime_ Square root / six prime method
Lingyun going to sea | Murong Technology & Huawei cloud: creating a model of financial SaaS solutions in Africa
E-week finance | Q1 the number of active people in the insurance industry was 86.8867 million, and the licenses of 19 Payment institutions were cancelled
Flet tutorial 05 outlinedbutton basic introduction (tutorial includes source code)
Function analysis and source code of hash guessing game system development
NLP、视觉、芯片...AI重点方向发展几何?青源会展望报告发布[附下载]
二叉树的四种遍历方式以及中序后序、前序中序、前序后序、层序创建二叉树【专为力扣刷题而打造】
What is involution?