当前位置:网站首页>看腾讯大老如何做接口自动化测试
看腾讯大老如何做接口自动化测试
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自动化测试/性能/测试开发】
边栏推荐
- 2022 Health Exhibition, health exhibition, Beijing Great Health Exhibition and health industry exhibition were held in November
- 易周金融 | Q1保险行业活跃人数8688.67万人 19家支付机构牌照被注销
- Win11怎么搜索无线显示器?Win11查找无线显示器设备的方法
- How to adapt your games to different sizes of mobile screen
- 左右最值最大差问题
- 六石编程学:关于代码,有六个得意
- Informatics Olympiad 1336: [example 3-1] find roots and children
- The problem of the maximum difference between the left and right maxima
- NLP, vision, chip What is the development direction of AI? Release of the outlook report of Qingyuan Association [download attached]
- Template_ Judging prime_ Square root / six prime method
猜你喜欢
[Beijing Xunwei] i.mx6ull development board porting Debian file system
On communication bus arbitration mechanism and network flow control from the perspective of real-time application
电脑共享打印机拒绝访问要怎么办
In the first month of its launch, the tourist praise rate of this campsite was as high as 99.9%! How did he do it?
FS4061A升压8.4V充电IC芯片和FS4061B升压12.6V充电IC芯片规格书datasheet
Reinforcement learning - learning notes 2 | value learning
【历史上的今天】7 月 4 日:第一本电子书问世;磁条卡的发明者出生;掌上电脑先驱诞生
ICML 2022 | Meta提出鲁棒的多目标贝叶斯优化方法,有效应对输入噪声
MySQL中的日期时间类型与格式化方式
Pointnext: review pointnet through improved model training and scaling strategies++
随机推荐
Common verification rules of form components -1 (continuously updating ~)
What is the application technology of neural network and Internet of things
凌云出海记 | 文华在线&华为云:打造非洲智慧教学新方案
记一次 .NET 某工控数据采集平台 线程数 爆高分析
强化学习-学习笔记2 | 价值学习
同事的接口文档我每次看着就头大,毛病多多。。。
【深度学习】一文看尽Pytorch之十九种损失函数
Application practice | Shuhai supply chain construction of data center based on Apache Doris
What ppt writing skills does the classic "pyramid principle" teach us?
Huawei Nova 10 series supports the application security detection function to build a strong mobile security firewall
Practical examples of node strong cache and negotiation cache
PHP pseudo original API docking method
Huawei cloud store homepage banner resource bit application
Jiuqi ny8b062d MCU specification /datasheet
Length of the longest integrable subarray
Ziguang zhanrui completed the first 5g R17 IOT NTN satellite on the Internet of things in the world
GVM使用
Win11亮度被锁定怎么办?Win11亮度被锁定的解决方法
Win11共享文件打不开怎么办?Win11共享文件打不开的解决方法
Detailed explanation of Audi EDI invoice message