第1节:企业要求、接口测试流程、如何做、企业接口管理工具介绍
企业测试级别要求:
企业测试招聘要求:
企业接口如何做:
接口自动化测试体系流程:
企业接口管理用到最多工具【可以自己搭建哟】:
enlinker: https://www.eolinker.com/#/
Eolinker 业内领先的 API 全生命周期管理方案:API自动生成、API管理、API自动化测试、API网关、API监控、API开放平台wxiao.w.eolinker.com
yapi:https://hellosean1025.github.io/yapi/
第2节 用例规范设计&【自动化用例框架再说到】
接口用例设计保持:参数是否必填、参数间是否存在关联、参数取值范围、业务规则
第3节 charles抓包工具(方法定位接口问题)支持app/web
抓包作用:
1.抓web、app运用接口方便定位问题、接口测试
2.可以模拟一些数据、单个数据、多条数据
web抓包安装即可,直接抓就能获取对应接口
苹果&安卓抓包:
1.charles安装配置:
1.pxory->pxory-settings中设置端口号8888.勾选enable
2.help->ssl pxorying->install charles root car证书
3.PC CMD中输入ipconfig ,手机找到你对应WIFI设置选择手动IP端口号:8888(电脑WIFI必须和手机连接的wifi是一致)
4.打开手机浏览器你安装证书 https://chls.pro/ssl charlesproxy.com/getssl
(注意:如果手机自带浏览器下载的证书无法安装,请在市场下载一个chrome ,UC浏览器安装证书)
苹果手机抓包和android手机抓包配置一致,但是苹果手机证书安装会后需要在通用去找到你对应的证书信任一下,即可
打开设置,点击通用->关于本机->证书信任设置,找到当前要作为代理的电脑名,打开信任开关。
注意:电脑防火墙一定要关掉,不然都配置了,莫名其妙抓不了,找不到原因
2.数据模拟(重定向)
修改返回个参:tools->rewrite->enable勾选
修改接口返回全局参数:tools->map local->勾选enable
preference:
request以及response的显示设置
默认charles的数据显示是没有request以及response,需要将隐藏选项关闭
3.网络模拟
设置网速:
Throttle Settings-》
第4节 postman使用
第5节 http协议/状态码详解、websokcet协议、服务器交互流程
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统
初步协议认识:
HTTP协议:超文本传输协议,用于普通浏览
HTTPS协议:安全超文本传输协议,身披SSL外衣的HTTP协议
FTP协议:文件传输协议,用于文件传输
POP3协议:邮局协议,收邮件使用
SMTP协议:简单邮件传输协议,用来发送电子邮件
webscoket协议:服务器可以主动向客户端推送消息,客户端也可以主动向服务器发送消息,信息沟通
SSH协议:安全外壳协议,用于加密安全登陆,替代安全性差的Telent协议
http常见状态代码、状态描述、说明:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,服务器不理解请求的语法
401 Unauthorized //(未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
403 Forbidden //服务器收到请求,服务器拒绝拒绝请求
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
http:发送请求->服务器返回连接应答->客户端返回就绪->最终结果显示结果
Webscoket:
1.WebSocket建立在TCP协议之上,并且与HTTP协议有着良好的兼容性,最大的特点就是服务器可以主动向客户端推送消息,客户端也可以主动向服务器发送消息
客户端通过HTTP协议向服务端发送握手-》服务端向客户端返回ACK(数据包传达确认信息),此时握手成功-》建立连接并维持该连接;-》后面服务端和客户端就可以基于建立的连接进行双向通信-》直到连接关闭
2.WebSocket与HTTP对比
3. WebSocket的协议标识符是 ws,加密为 wss
ws://ip:port/some/path
服务器交互流程:
DNS就是域名解析:
例如:bai来说就是电脑访问网du站需要知道网站所在的IP地址zhi,有了DNS服务之dao后登陆百度只需要输入www.baidu.com而不是202.108.22.5。
DNS服务会将域名解析为IP地址,方便用户访问网站时不需要记住枯燥的数字
跨域:
a网站(百度一下,你就知道)要请求一个b网站的数据(www.baidutest.com)
jsonp前端解决跨域
nginx反向代理
第5节 cookie、token、session&request和response认识
应用场景直观理解:
cookie日常登录一个网站,今天输入用户名密码登录了,第二天再打开很多情况下就直接打开了。这个时候用到的一个机制就是cookie
session的一个场景是购物车,添加了商品之后客户端处可以知道添加了哪些商品,而服务器端如何判别呢,所以也需要存储一些信息,这里就用到了session
token一般运用登录会生成一个token传入下一个其它接口,作为身份验证
cookie原理:Cookie技术会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie
Session原理:是存放在服务器端、用来存放用户数据的(类似于HashTable结构)。
当浏览器第一次发送请求时,服务器自动生成了一个HashTable和一个Session ID用来唯一标识这个HashTable,并将其通过响应发送到浏览器。当浏览器第二次发送请求,会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的HashTable,以此来达到共享数据的目的
过程:
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以
Token:身份验证令牌 用户向服务器申请登录系统令牌-》拿着申请的令牌登录对应系统(用的比较多)
request和response的认识
1.requests.get() 获取HTML网页的主要方法,对应HTTP的GET
2.requests.post() 向HTML网页提交POST请求的方法,对应HTTP的POST
get方法需要接受一个参数URL,构造一个向目标服务器发送请求的request对象,返回一个包含对象服务器资源的response对象,常用为【response = requests.get("url")】
response对象的属性
a.response.text HTTP响应内容的字符串形式
b.response.encoding 响应的内容编码
c.response.content 响应内容的二进制
第6节 python环境基础设施搭建pycharm
python 3以上 一步步安装
配置环境变量: 系统变量-》path中加入::\Program Files\python
C:\Program Files\python\Scripts
pytchram 2019.2 pychram破解
Pycharm2019.2.1永久激活 - pycod - 博客园
-javaagent:C:\Program Files\JetBrains\PyCharm 2019.2\bin\jetbrains-agent.jar
License server: http://jetbrains-license-server
第7节 循环、python列表、字典、截取、面相对象、mysql连接操作(MySQLdb)
字符串&字典&截取&列表:
#python标准的数据类型
#number数字
#String字符串
#Tuple元组
#dictionary字典
#运算符 + -* / % 取整
# a=10;b=20;
# print(a+b)
# print(a-b)
# print(a*b)
# print(b/a)
# # 取余数
# print(b%a)
# #取整数
# print(9//2)
#条件判断语句 >80分 你真棒 <50分你真差80
# cc=float(input("你输入的成绩:"));
# if cc>=80:
# print("你真棒");
# elif cc<50:
# print("你真差");
#循环语句
# a=0;
# while a<10:
# a=a+1;
# print(a)
#contiue用于跳过该次循环 break退出循环
#i>10退出循环
# i=1;
# while i:
# print(i);
# i=i+1;
# if i>20:
# break
# # i+=1
#输出1-10偶数
# i=1;
# while i<10:
# i+=1;
# if i%2>0:
# continue
# print(i)
for循环
# list=["a","b","c","d"] #列表
# for i in list:
# print(i)
列表
list=["a","b","c","d"] 列表的方法 append追加
list=["a","b","c","d","a"]
# list.append(11)
# print(list)
#移除列表元素
# list.remove('a')
# print(list)
#count统计列表中的次数
num=list.count("a")
print(num)
#pop移除列表的一个元素
# list.pop(2)
# print(list)
#反向列表元素
list.reverse()
print(list)
#字符串操作
cc="123456789";
print(cc[0:3]) #截取第一位到第三位
print(cc[:]) #截取全部字符
print(cc[2]) #截取第三个字符
print(cc[-3:])#截取倒数三位的字符
print(cc[::-1]) #倒序排序字符
#元组 元组和列表类似,不同之处就是元组的元素不能修改
aa=(1,2,3,4)
bb=(5,6)
print(aa+bb)
#区别:元组定义元素不能修改,而字典可以被修改
#字典 键key 值value
aa={"name":"清心","age":18}
print(aa['name'])
aa['age']=19
print(aa['age'])
面向对象:封装
#面向对象-oop 一种编程思想,万物皆对象,面向对象提高了编程效率,重复利用性搞,
#一个对象包含了数据和操作数据的函数
#把需要重用的函数或者功能封装,方便程序直接调用
#例如我们班的同学都需要睡觉,喝水,吃饭
#清心、Leon,“”都需要喝水,吃饭
封装:
封装
继承
第8节 requests 库介绍/get/post/上传/json请求讲解
get:
post:
上传图片:
常见参数:
r.url 打印url地址
r.text 打印服务器响应的内容
r.encoding 打印编码格式
r.content 打印请求响应体
r.json() 打印json格式
r.status_code 响应状态码
r.headers 响应头信息
r.headers['token'] 响应头某一个值
timeout意思是:如果这个接口请求到服务器响应回来的内容超过3S就会报错
断言: self.assertEqual(name,"xxx")
1.json.dumps 将字典转化为字符串)
2.json.loads()函数是将json格式数据转换为字典(可以这么理解,json.loads()函数是将字符串转化为字典)
第九节 cookie seesion 实战
获取cookie
实例化调用:
session用法:
第10节 jsonpath
1. jsonpath介绍
用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java
2. JsonPath 对于 JSON 来说,相当于 XPath 对于 XML。
安装方法:pip install jsonpath 官方文档:JSONPath - XPath for JSON
3.jsonpath在工作中为我们省了很多力,不用整那么多循环,获取值从此不费劲,你看
接口:
import jsonpath
#获取车的NAME
rets = jsonpath.jsonpath(cc, '$..name')
#获取carNum小于10多少name的值判断
rescc=jsonpath.jsonpath(cc,"$.data.resList[?(@.carNum<10)].name")
#获取tags所有value值
resdd= jsonpath.jsonpath(cc, "$.data.resList[*].tags[*].value")
#组织片段获取最后两个值
resff = jsonpath.jsonpath(cc, "$.data.resList[-2:]")
第11节 unittest、各种断言用法、discover、unittest参数化(paramunittest)
1.unittest单元测试框架:
主要作用:加载用例、执行用例、管理用例、集成报告
优点:提供用例组织与执行方法;提供比较方法;提供丰富的日志、清晰的报告
2.unittest官方文档 https://docs.python.org/2/library/unittest.html
注意事项:
模块名以test开头
类以Test开头
方法以test开头
3.unittest前需要了解该框架的五个概念:[test case,test suite,test runner,test fixture]
test fixture一个测试用例的初始化准备及环境还原,主要是setUp() 和 setDown()方法;
setUp() 和 setDown():
setUpClass和tearDownClass只执行一次:
setUpClass和tearDownClass的参数是cls,且在定义之前必须加装饰器@classmethod
#classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数【先科普一下】
test case:一个完整的测试单元,执行该测试单元可以完成对某一个问题的验证,完整体现在:测试前环境准备(setUp),执行测试代码(run),以及测试后环境还原(tearDown);
test suite:多个测试用例的集合,测试套件或测试计划;
test runner:执行测试用例,并将测试结果保存到TextTestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息;
加入unittest.skip("暂时不执行")这条用例不执行
verbosity=2
0代表得到执行的测试总数和全局结果
1代表得到成功的显示,失败的显示f,错误显示E
2可以得到详细信息
4.unittest断言我们也经常用到:
5. unittest中上面用到addtest有成千上万的用例加载太麻烦了
discover()方法可以批量加载用例,果断用上,别用addtest一条一条加载了
unittest中的discover()方法可以批量加载用例
start_dir:测试模块名或测试用例所在目录
pattern='test*.py':表示用例文件名的匹配方式,此处匹配的是以test开头的.py类型的文件,*表示匹配任意字符
top_level_dir:测试模块的顶层目录import unittest
用例1:
class MyTestCase(unittest.TestCase):
def test_1(self):
print("1");
用例2:
class MyTestCase(unittest.TestCase):
def test_2(self):
print("2")
6. 加载生成htmltestrunner报告
第一种方式:
第二种方式:
8.unittest参数化使用(paramunittest)
paramunittest是unittest实现参数化的一个专门的模块,可以传入多组参数,自动生成多个用 例 前面讲数据驱动的时候,用ddt可以解决多组数据传入,自动生成多个测试用例
pip install paramunittest
1.官方文档地址:ParamUnittest
2.github源码下载地址:rik0/ParamUnittest
第12节 pytest自动化框架方式
pytest与unittest对比优缺点:
1.有独立的命名,并通过声明它们从测试函数、模块、类或整个项目中的使用来激活。
2.按模块化的方式实现,每个fixture都可以互相调用。
3.unittest需要继承unitest.testcase类,pytest不需要继承,可以是个类,可以是个函数
4.unittest测试报告htmltestrunner,pytest-html或者是allure
5.unittest参数化需要依赖第三方库,pytest不需要依赖,直接使用parametrize
6.unittest不支持重试,pytest支持重试
安装:
pip install -U pytest
pip install -U pytest-html
pip install -U pytest-rerunfailures(失败重跑插件)
命令行检查:py.test --version
官网:API Reference - pytest documentation
命名:文件名以test_*.py文件和*_test.py
test_开头的函数 Test开头的类 test_开头的方法
fixture:fixture是pytest中的一个特性:
1.包括定义传入测试中的数据集,配置测试前系统的初始状态,为批量测试提供数据源等等
2.fixture是pytest用于将测试前后进行预备,清理工作的代码分离出核心测试逻辑的一种机制
main运行中-s还有几个参数:一一道来
-v 用于显示每个测试函数的执行结果
-q 只显示整体测试结果 -s 用于显示测试函数中print()函数输出
-x, 在第一个错误或测试失败时立即退出 -h 帮助
fixture的scope参数方式:【function,module,class,session】
a.function:每个test都运行,默认是function的scope,这种都执行
b.class:每个class的所有test只运行一次
c.module:每个module的所有test只运行一次
session:每个session只运行一次
fixture为session级别是可以跨.py模块调用的,多个.py文件的用例的时候,
如果多个用例只需调用一次fixture,并且写到conftest.py文件里
conftest.py文件
执行session文件
pytest参数化
pytest中偶尔会使用mark标记方式
备注:除了执行bb之外的用例not bb 【 pytest.main(["-s", "test_server.py", "-m=not bb"])
pytest预期异常
预期就是抛出一个异常,抛出异常后pytest或停止该条测试用例的继续执行
第13节 pytest报告生成加载+allure
第一种方式生成报告:pip install pytest-html
if __name__ == '__main__':
unittest.main('-m smoke',
'-junit-xml=report/test.xml',
'--html=report/test.html'
)
第二种方式生成报告 allure-pytest
安装:pip install allure-pytest
首先认识几个概念
@allure.feature # 用于定义被测试的功能,被测产品的需求点
@allure.story # 用于定义被测功能的用户场景,即子功能点
@allure.severity #用于定义用例优先级
@allure.issue #用于定义问题表识,关联标识已有的问题,可为一个url链接地址
@allure.testcase #用于用例标识,关联标识用例,可为一个url链接地址
@allure.attach # 用于向测试报告中输入一些附加的信息,通常是一些测试数据信息
@pytest.allure.step # 用于将一些通用的函数作为测试步骤输出到报告,调用此函数的地方会向报告中输出步骤
allure.environment(environment=env) #用于定义environment环境
用例实现:
封装一个shell方法启动进程:
报告方法加载xml&report:
报告结果生成:
网友评论