> 文章列表 > 肖 sir_就业课__010接口测试和接口自动化讲解

肖 sir_就业课__010接口测试和接口自动化讲解

肖 sir_就业课__010接口测试和接口自动化讲解

接口测试和接口自动化讲解
一、你会接口测试吗? 会
二、你做过哪些接口?
cms项目接口:查询接口,登录接口,添加用户接口,用户管理接口,文章管理接口,删除用户接口,删除栏目接口,修改密码接口
保险项目接口:登录接口,车牌信息接口,投保接口,生成保单接口,
银行项目接口:接口接口,提现接口,审批接口,绑卡借款,放款接口,还款接口,逾期接口、登录接口 选择借款类型接口 信息填写接口 审批接口 接收文件接口 上传文件接口 放款接口 收款接口 逾期接口 信息录入接口
网络运维工单平台接口:登录接口、新建信息发布接口、信息填写接口、文件导入接口、查询接口、工单合并接口
crm项目接口:录入接口 查询接口 客户分配接口 修改信息接口 审核接口 工单接口 行程接口 消息接口 其他业务接口 房源接口 合同接口
物流接口:订单接口、出库信息接口、签收信息接口、运单路由接口、订单撤单接口
api 线上连接:https://apis.baidu.com/
三、接口测试流程是什么?
(1)情况一:有接口文档的情况
步骤:
(一)从开发哪里拿到接口文档
(二)接口文档中有接口的参数,
(三)根据接口文档编写接口用例
(四)评审接口用例
(五)部署环境
(六)使用接口测试工具进行接口测试(python+request、postman、jmeter)
(七)有bug就通过bug管理工具提交给开发修改
(八)修改好bug,在验证bug,在关闭bug
(九)在输出接口测试报告
(2)情况二:没有文档的情况
(一)通过fiddler抓包工具抓接口
(二)抓接口的参数,
(三)根据接口文档编写接口用例
(四)评审接口用例
(五)部署环境
(六)使用接口测试工具进行接口测试(python+request、postman、jmeter)
(七)有bug就通过bug管理工具提交给开发修改
(八)修改好bug,在验证bug,在关闭bug
(九)在输出接口测试报告

四、接口测试你使用哪些工具?
(1)postman
(2)jmeter
(3)python+requests
五、你具体讲下接口怎么做的?或者你给我具体讲下你做过一个接口?
(1)postman
我讲下借款接口:我使用postman这个接口测试工具,首先打开postman,选择请求方式有post、get,我选post请求,因为有 入参,再输入url (协议+ip/域名+接口路径),点击body,输入参数
“code”: “ABCDEF”,
“method”: “loanCalculate”,
“data”: {
“loanAmount”: 100000,
“loanTerm”: 15
},
“sign”: “{签名规则参考 接口请求签名章节}”,
“timestamp”: 1500693926
}
借款金额、接口期数,在test输入断言,断言响应体、响应时间、响应状态码,在点击send 进行发送,查看响应体
有请求成功、请求失败,
成功显示:

"code": "success",
"message": "请求成功",
"result": {"repayAmount":115000,"receiveAmount":100000,"interestFee":10000,"serviceFee":5000,"serviceFeeDesc":""
}
失败显示:
{
"code": "error",
"message": "验签失败"

}这就是我的一个借款接口;还有一些关联接口、依赖接口、接口参数化 等
(2)jmeter
我讲下借款接口,使用jmeter工具做的,首先在测试计划中添加一个线程组,在线程组中的sample 中添加一个http请求,在htttp请求填写接口参数:协议http、服务器或ip,端口号、请求方式get或post、在填写接口路径、还有编码格式,在填写
入参有
“loanAmount”: 100000,
“loanTerm”: 15
在对接口进行断言:在断言中有一个相应断言,断言有包含,相对等;断言后要查看结果,右键监听器,查看结果树,在进行保存,在点击运行,运行成功后在点击查看结果树,红色表示错误,绿色表示通过,结果中有取样结果、请求参数、响应数据。这就是我做的一个接口。 还有一些关联接口、依赖接口、接口参数化 等
(3)python+requests,
我用的是python+requests做接口测试,先要导入requests库 impost request ,先将接口的请求url(url是什么)、请求数据data(data是什么)、请求类型定义(Content-Type’:‘application/x-www-form-urlencoded’)写好参数;在通过requset请求方式请求,请求方式有三种:
第一种:requets.post(url, data=None, json=None) 或requets.get(url, params=None)
第二种:requests.request(method=“post”,data=None, json=None)或requests.request(method=“get”,data=None, json=None)
第三:requests.Session() 保持接口会话关系
创建一个对象来接收请求结果,打印响应结果:
打印响应内容 :print (对象.text)
打印url内容 :print(dl_rep.url)
打印cookies:print(dl_rep.cookies)
打印请求头:print(dl_rep.headers)
打印json:print(dl_rep.json())
打印状态码:print(dl_rep.status_code)
接口请求到结果可以转换成json格式,在通过if语句或assert进行断言;这就是我做的接口

====================================
五、你有做过接口自动化?接口自动化如何做的?
(1)python+request+unittes
做过接口自动化,我做的接口自动化是结合python+request+unittest框架做的,

案例1:
一、结合python+requests+unittest框架做接口自动化测试
先import 导入 unittest这个模块,然后封装一个类class 定义为定义一个test去继承(unittest.testcase):
然后就是类的开始,类开始和结束前面需要加一个装饰器@classmethod,类开用def setupclass(cls)来表示,类的开始cls.session=requests.session()。类结束要用def teardownclass(cls)来表示。类开始结束在整个框架中只会运行一次。然后就是方法开始方法结束,方法开始与结束在每一条用例都会运行一次,方法开始用def setup(self)来表示,方法结束用def teardownclass(self)来表示。后面就写用例,书用例用def test_开头将每个接口都写上顺序,按ascii码顺序排序1-9,A-Z,a-z,在编写接口的参数和接口请求方式等,或者在py文件中写好并导入调用,最后用main方法作为入口:if _ name ==’ main _’:用来执行用执行偶三种方法:第一种:unittest.main()来调用上面的所有用例,第二种方法使用:unittest.TestSuite () 套件添加部分用例,addTest(),在使用unittest.estrunner,在用run执行;第三种方法:就是执行一个路径下所有的用例:unittest.defaultTestLoader.discover(start_dir=路径,pattern=“搜索的内容”),在使用unittest.TextTestRunner()运行用例,还可以导入报告模板HTMLTestRunner,在去open打开报告文件,写入执行内容、标题、执行情况、测试人员,生成接口测试报告。这就是我的接口自动化测试
import unittest
import requests
import time
from xin.HTMLTestRunner3_New import HTMLTestRunner
class Cms(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.session=requests.session() #session是是一个全局变量作用是保持上下接口会话和关联
@classmethod
def tearDownClass(cls): #类的结束
print(“类的结束”)
def setUp(self): #方法开始
print(“方法的开始”)
def tearDown(self):
print(“方法的结束”)
def test001(self): #定义一个接口用例
url=“http://cms.duoceshi.cn/cms/manage/loginJump.do”
data={“userAccount”:“admin”,“loginPwd”:123456}
headers=“Content-Type: application/x-www-form-urlencoded”
r=self.session.post(url=url,data=data,json=headers)
print(r.text)
def test002_yhgl(self): #用户管理接口
l_url = ‘http://cms.duoceshi.cn/cms/manage/queryUserList.do’
l_data={‘startCreateDate’:‘’ ,‘endCreateDate’:‘’,‘searchValue’:‘’ ,‘page’: 1}
headers={‘Content-Type’: ‘application/x-www-form-urlencoded’}
l_r =self.session.post(url=l_url,data=l_data,headers=headers)
print (l_r.text)
def uits(): #创建一个普通函数,作用是容器存放用例
us=unittest.TestSuite() #创建一个套件对象
us.addTest(Cms(“test001”)) #单个用例执行
# us.addTest([Cms(“test001”),Cms(“test002”)]) #执行多条用例
if name == ‘main’:
# unittest.main() #第一种方法
# r=unittest.TextTestRunner()
# r.run(uits()) #第二种方法
# path=r"C:\\Users\\Administrator\\PycharmProjects\\untitled6\\xin"
# ss=unittest.defaultTestLoader.discover(start_dir=path,pattern=“re*.py”)
# runner=unittest.TextTestRunner()
# runner.run(ss) #第三种搜索路径方法
path=r"C:\\Users\\Administrator\\PycharmProjects\\untitled6\\xin"
ss=unittest.defaultTestLoader.discover(start_dir=path,pattern=“re*.py”)
bgpath=r"C:\\Users\\Administrator\\PycharmProjects\\untitled6\\xin"
now=time.strftime(“%Y-%m-%d-%H-%M-%S”)
filename=bgpath+“\\”+str(now)+‘api_report.html’
f=open(filename,“wb”)
runner=HTMLTestRunner(stream=f,title=“接口自动化测试报告”,description=“用例执行情况如下”)
runner.run(ss)
f.close()#释放资源,关闭文件

======================
六、接口自动化框架设计
背景:因为把传入接口参数、组建测试用例、执行测试用例和发送报告,都放入一个.py文件对于接口的使用非常不灵活就需要数据和接口业务进行分离让代码之间的耦合性降低。和实现接口的分层管理,所以需要对代码进行封装处理。
接口分层思想:
cms_api:组建并发送接口请求config:放所有接口的入参信息
report:放置运行所有测试用例生成的报告run:自动加载所有的测试用例、并且运行
testcase:继承unittest单元测试框架、组建接口测试用例
www.duoceshi.cn
utils:工具类、发送邮件和生成报告模块

案例:
 二、 python+requests+unittest 接口自动化框架设计分层如下:

首先我们需要在pycharm里新建一个项目名称,然后我们需要建6个包:cms_api、config、report、run、testcase、utils包。

cms_api:用来组建接口、发送接口请求
config:放入接口的入参信息
report:存储测试用例生成的报告
run:运行所有的测试用例
testcase:接口的测试用例
utils:工具类、创建报告和发送邮件模块
首先写好config的入参的相关信息,比如url,data,header,写好各个接口的相关入参信息
在cms_api包中组建接口的和发送接口请求,导入requests模块
创建一个全局的session对象、用来保持会话的状态和管理上下文,把各个接口的请求方式编写出来,同时用rep.json()来,全部封装在一个类里
在testcase包中组建测试用例导入unittest模块、cms_api里面的Cms类
定义一个类,且继承unittest中的TestCase,用匿名对象来调用实例方法,然后进行断言
用run模块来运行所有的测试用例导入unittest、time,mail3, HTMLTestRunner,定义项目的路径
定义用例的路径,定义测试报告的名称
定义自动搜索用例,执行测试用例并生成报告,这里要注意时间戳。
E测试用例报告生成在report里面,用谷歌浏览器打开
F最后就是把报告发送到邮件里,
详解代码;
https://www.cnblogs.com/xiaolehua/p/13810079.html

======================
三、
案例:

API自动化框架

API自动化框架分为conf、data、utils、api、testcase、runner、report、log8个模块。
conf是用来储存系统环境、数据库、邮件等的配置参数、项目的绝对路径、各个模块的绝对路径、各个接口的参数url、data、headers、json、verify(关掉https),其中有ini、yaml、xlsx文件等,通过响应的方法来处理相应的文件。ini文件是section、option、value的形式,一般通过继承configparse模块进行处理,yaml文件的读取是以字典的形式,一般是用@unitest.skip@file_data@unpack装饰器进行读取,xlsx文件主要是通过openxlsx、xlrd、xlwt、xlutils模块进行读取。
data是用来封装进行的是用例的数据,一般是通过xlsx进行读取。
utils模块封装了处理文件、读取数据库内容、发送报告、处理日志等模块。调用数据库用到pymysql模块、控制日志输出用到了logging模块、邮件发送用到了smtp模块和Email模块、处理ini文件用到了configparse模块、读取xlsx用到了openxlsx、xlrd、xlwt、xlutils等模块。
api模块封装了各个接口的发送api请求的方法。通过调用request模块来进行请求的发送。
testcase模块用来封装测试用例。通过unitest测试框架,继承unitest.TestCase类、api模块封装的接口连接方法、使用ddt数据驱动进行测试。
runner模块用来封装要运行的测试用例,可以通过unitest.TestSuite来封装要运行的测试用例,而大部分都是通过unitest.defaultTestLoad.discover()方法来批量指定要运行的测试用例文件、可以通过unitest.TestRunner来运行测试用例,可以通过HTMLTestRunner运行测试用例和生成测试报告。
report是用来储存运行测试用例后的测试报告。
log是用来存储运行测试用例的日志,用到logging模块,设置输出到控制台的日志文件,设置输出到文件的日志等级等。

===================================

接口面试题:
https://www.cnblogs.com/xiaolehua/p/16386159.html
如:
1、你们公司的接口测试流程是怎样的?
2、说下cookie、session、token 的区别?
3、get和post请求区别?
4、http和https区别?
5、响应状态码有哪些?
6、接口测试主要考虑哪些场景?(重点多考虑)
7、为什么要进行接口测试?
8、有用过抓包工具?具体怎么使用?
9、关联是什么?关联接口如何操作?
10、接口请求参数入参有哪些类型?
11、接口测试中依赖接口如何操作?
12、如何分析一个bug是全端bug还是后端bug?
13、什么是接口测试?
14、接口测试包含那几部分?
15、讲下三次握手和四次挥手?
16、接口测试中如何进行断言、断言哪些内容?
17、json和字典的区别,python中如何互相装换?
18、什么是数据驱动?如何参数化?
19、依赖第三方的接口如何处理?
20、接口产的垃圾数据如何处理
21、mock能做什么?(了解下)
22、你平时用的接口测试工具有哪些?
23、接口测试中如何模拟弱网测试?
24、当一个接口出现异常、你是如何分析异常?
25、接口测试中如何实现参数化?
26、什么时候开展接口测试?
27、请讲下七层模型?
28、params和data区别?
29、你的项目汇总接口用例有多少,每次大概执行多长时间?
30、你项目中有多少接口自动化用例?
31、联调测试有做过吗?
32、python中进行接口测试有多少种方法?
33、udp协议和tc协议了解马?属于哪一层?
34、接口测试注意的事项?
35、接口测试中网络异常这种场景您是怎么测试的,如何操作的?