第十章 自动化测试 Pytest+Jenkins
之前unittest框架
pytest是 python的一种单元测试框架
+数据库(关系型数据库MySQL,非关系型数据库redis)
需要用到 requests(请求),yml(pyyaml读取测试用例data.yaml的一个包),allure(测试报告),log(记录运行日志),pyMySQL(数据库)插件
跟Jenkins打通,发送到钉钉或企业微信
一,环境搭建
①python安装
python官网 -- 点击Download-Windows -- 下载3.7.6版本 x86-64 -- 双击安装包
-- 需要勾选 add python 3.7 to path
cmd--控制台--输入python 回车--显示python3.7.6就表示安装成功了
可以尝试测试下: print(“pytest。。。”)回车 -- 显示运行结果 pytest。。。
②编辑器pycharm安装
选择other versions(因为最新版本没办法破解)-- 找到2021-01-13号版本 -- 双击安装成功即可 --打开时点击试用(30天试用期)
二,接口测试
(1)HTTP是一个协议(服务器传输超文本到浏览器的传送协议)
是基于TCP/IP通信协议来传递数据(HTML文件,图片文件,查询结果等)
(2)具体工作流程:eg,访问www.baidu.com
① DNS先进行域名的解析 将域名地址转化为IP地址 Remote Address
②发起TCP请求,三次握手建立连接
③客户端 发送HTTP请求到服务端
④服务器端处理请求,返回HTTP报文
⑤浏览器接收返回HTTP报文,进行渲染展示
⑥ 断开连接 进行四次挥手
(3)HTTP资源

空白--右键--检查 进行查看
三,pytest详细介绍
首先建一个新的项目
①打开 pycharm +new project
②Location 选择项目文件地址 再+一层 ApiTest
Base interpret 选择python安装目录 点击create
main.py 简单的测试代码,点击三角符号,可运行,说明服务器创建成功了
③选中 ApiTest文件夹 -- 右键 --new --python file eg:test_get
(1)python requests安装
在刚新建的test_get.py文件中
import requests #引入包,请求接口
# 如果爆红
①可以把鼠标点上去,会弹出提示-- install package requests --点击之后就会安装
②最下方一行找到terminal(终端的意思)--输入:pip3 /pip install requests
③最下方一行找到python packages,搜索requests,安装就行了
(2)python requests使用
输入requests. 自动会弹出提示,可以选择想用的方法
# requests.post
# requests.get
# 鼠标左键+CTRL 可以跳进去查看源码
def get(url,params=none,**kwargs)#函数定义,参数:url必传,params选传,不传时默认为none,关键字参数,传的话以key,value形式
def post(url,data=none,json=none,**kwargs)#函数定义,参数:url必传,params选传,不传时默认为none,关键字参数,传的话以key,value形式

简单的使用例子:
import requests
r = requests.get("https://www.baidu.com") # 用r来接收接口请求的结果 r={response}
print (r.status_code)
print (r.json()) # r. 会提示response中的返回值内容
可以点击代码前的位置,打上断点
右键--debug 查看
点击三角符号继续运行

简单的使用例子(带params参数):
选中 ApiTest文件夹 -- 右键 --new --python file eg:test_get_params
import requests
params1={“number”:“13167894587”,“appkey”:“0c565f14687d84”}# python中字典数据类型,先定义参数
r = requests.get(url="https://www.baidu.com",params=params1)
print (r.status_code)
print (r.json())
或者直接输入参数
import requests
r = requests.get(url="https://www.baidu.com",params={“number”:“13167894587”,“appkey”:“0c565f14687d84”})

简单的使用例子(post带json参数):
选中 ApiTest文件夹 -- 右键 --new --python file eg:test_post_params
import requests
json_data={"title"="food",“number”:“13167894587”,“appkey”:“0c565f14687d84”}# python中字典数据类型,先定义参数
r = requests.post(url="https://www.baidu.com",json=json_data)# 看接口body中传参是data还是json,就用相应的参数
print (r.status_code)
print (r.json())
(3)requests请求中加入请求头(多个接口会用到,拎出来避免冗余)
反爬程序,会出现418
Headers:Cookie,User-agent
简单的使用例子:
import requests
r = requests.post(url="https://www.baidu.com",headers={"user-Agent":"Mozilla/5.0..."})#接口中的**kwargs关键字参数,可选参数
print (r.status_code)
print (r.json())
四,代码封装
(1)pip install pytest #先安装pytest第三方包
新建一个 python file:注意:文件命名规范:以test_开头,如果不规范不会去执行
def test_one():
expect=1
actual=1
assert expect == actual #关键字assert 用于捕获错误并提示用户定义的错误消息
# assert关键字也称断言函数。 常用于在程序运行时检测某条件是否满足,如果不满足则会报错。
每条测试用例都要def一个 test_xx方法
(2)**程序运行方式:
①命令行运行
最下方一行找到terminal(终端的意思)--输入:pytest test_one(测试用例文件名)
test+tab键,会展示相关文件名
运行结果:绿色点 成功 红色F 失败
②三角形图标运行(可分别运行测试用例)
执行方式:tools-- python inter grated tools --testing -- default test runner:pytest
或者直接搜索pytest,可以定位到python inter grated tools
(3)常用断言方式:
等于: == 不等于:!= 大于:> 小于:< 属于:in 不属于:not in
大于等于: > = 小于等于: < = 是:is 不是:is not
(4) CTRL+ALT 代码格式化 tab键缩行
(5) python requests使用改进
import requests
def test-baidu():
r = requests.get("https://www.baidu.com")
print (r.status_code)
assert r.status_code ==200
r2 = r.json() #JSON结果为:{‘status’:0,‘msg’:‘ok’,‘result’:{‘shouji’:‘13157489874’,‘city’:‘杭州’,‘company’:‘中国移动’}}
assert r2【‘status’】==0
assert r2【‘msg’】==‘ok’
assert r2【‘result’】【‘shouji’】==‘13167118005’
assert r2【‘result’】【‘city’】==‘ok’