Python3+pytest框架系列---2
Posted 丝瓜呆呆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python3+pytest框架系列---2相关的知识,希望对你有一定的参考价值。
一、项目及框架搭建
1、项目环境工具
- python https://www.python.org/downloads/
- pycharm http://www.jetbrains.com/pycharm/
- git https://git-scm.com/download
2、配置
Pycharm配置
配置python解释器 :Settings -> Project -> Project Interpreter
配置git解释器: Settings -> Version Control -> Git
Pycharm+Git配置
配置github :Settings -> Version Control -> GitHub
创建github项目:https://github.com/
上传github :增加忽略文件需要 安装.ignore插件,上传需配置github
二、requests
1、requests介绍及简单使用
(1)Requests介绍
流行的接口http(s)请求工具
使用功能强大、简单方便、容易上手
(2)Requests简单使用
安装Requests包
$ pip3 install requests
简单使用
import requests
requests.get("http://www.baidu.com")
Requests请求返回介绍
r.status_code #响应状态
r.content #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩
r.headers #以字典对象存储服务器响应头,若键不存在则返回None
r.json() #Requests中内置的JSON
r.url # 获取url r.encoding # 编码格式
r.cookies # 获取cookie
r.raw #返回原始响应体
r.text #字符串方式的响应体,会自动根据响应头部的字符编码进行
r.raise_for_status() #失败请求(非200响应)抛出异常
2、request用例编写
- 编写登录用例脚本
url = "http://172.17.0.139:5004/authorizations/"
data = {"username":"python", "password":"12345678"}
r= requests.post(url,json=data)
- 编写个人信息获取脚本
url = "http://172.17.0.139:5004/user/"
headers = \'{"Authorization": "JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NjUwNjMwOTksInVzZXJfaWQiOjEsImVtYWlsIj oiOTUyNjczNjM4QHFxLmNvbSIsInVzZXJuYW1lIjoicHl0aG9uIn0.f3GdeSnzb3UGsw1p1ejZ1rNLaaiBOAHUnN8_pq8LDE"}\'
r = requests.get(url,headers=headers)
- 商品列表数据
url = "http://172.17.0.139:5004/categories/115/skus"
data = { "page":"1", "page_size": "10", "ordering": "create_time"}
r = requests.get(url, json=data)
print(r.text)
print(r.json)
添加到购物车
def cart():
url = "http://172.17.0.139:5004/cart/"
data = { "sku_id": "3", "count": "1", "selected": "true"}
headers = {"Authorization": "JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NjU4NTU2NzcsInVzZXJfaWQiOjEsImVtYWlsIj oiOTUyNjczNjM4QHFxLmNvbSIsInVzZXJuYW1lIjoicHl0aG9uIn0.yotHV8wMX7MKHyioFDaGnrjTDTAYsLB0R 8Qsungw_ms"}
r = requests.post(url, json=data,headers=headers)
print(r.text)
print(r.json)
def get_cart():
url = "http://172.17.0.139:5004/cart/"
headers = { "Authorization": "JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NjU4NTU2NzcsInVzZXJfaWQiOjEsImVtYWlsIj oiOTUyNjczNjM4QHFxLmNvbSIsInVzZXJuYW1lIjoicHl0aG9uIn0.yotHV8wMX7MKHyioFDaGnrjTDTAYsLB0R 8Qsungw_ms"}
r = requests.get(url, headers=headers)
print(r.text)
print(r.json)
保存订单
def orders():
url = "http://172.17.0.139:5004/orders/"
data = { "address": "1", "pay_method": "1"}
headers = {"Authorization": "JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NjU4NTU2NzcsInVzZXJfaWQiOjEsImVtYWlsIj oiOTUyNjczNjM4QHFxLmNvbSIsInVzZXJuYW1lIjoicHl0aG9uIn0.yotHV8wMX7MKHyioFDaGnrjTDTAYsLB0R 8Qsungw_ms"}
r = requests.post(url, json=data,headers=headers)
print(r.text)
print(r.json)
3、Requests方法封装
封装requests get方法
#1、创建封装get方法
def requests_get(url,headers):
#2、发送requests get请求
r = requests.get(url,headers = headers)
#3、获取结果相应内容
code = r.status_code
try:
body = r.json()
except Exception as e:
body = r.text
#4、内容存到字典
res = dict()
res["code"] = code
res["body"] = body
#5、字典返回
return res
封闭requests post方法
#post方法封装
#1、创建post方法
def requests_post(url,json=None,headers=None):
#2、发送post请求
r= requests.post(url,json=json,headers=headers)
#3、获取结果内容
code = r.status_code
try:
body = r.json()
except Exception as e:
body = r.text
#4、内容存到字典
res = dict()
res["code"] = code
res["body"] = body
#5、字典返回
return res
封装requests公共方法
- 增加cookies,headers参数
- 根据参数method判断get/post请求
def requests_api(self,url,data = None,json=None,headers=None,cookies=None,method="get"):
if method =="get":
#get请求
self.log.debug("发送get请求")
r = requests.get(url, data = data, json=json, headers=headers,cookies=cookies)
elif method == "post":
#post请求
self.log.debug("发送post请求")
r = requests.post(url,data = data, json=json, headers=headers,cookies=cookies)
#2. 重复的内容,复制进来
#获取结果内容
code = r.status_code
try:
body = r.json()
except Exception as e:
body = r.text
#内容存到字典
res = dict()
res["code"] = code
res["body"] = body
#字典返回
return res
重构get方法
- 调用公共方法request_api,
- 参数:固定参数:url,method
- 其它参数: **args
#1、定义方法
def get(self,url,**kwargs):
#2、定义参数
#url,json,headers,cookies,method
#3、调用公共方法
return self.requests_api(url,method="get",**kwargs)
重构post方法
- 调用公共方法request_api,
- 参数:固定参数:url,method
- 其它参数: **args
def post(self,url,**kwargs):
#2、定义参数 #url,json,headers,cookies,method
#3、调用公共方法
return self.requests_api(url,method="post",**kwargs)
三、配置文件
1、Yaml 介绍及安装
-
Yaml 介绍
Yaml 是一种所有编程语言可用的友好的数据序列化标准。语法和其他高阶语言类似,并且可以简单表达字 典、列表和其他基本数据类型的形态。语法规则如下:
1. 大小写敏感。
2. 使用缩进表示层级关系。
3. 使用空格键缩进,而非Tab键缩进
4. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可。
5. 文件中的字符串不需要使用引号标注,但若字符串包含有特殊字符则需用引号标注;
6. 注释标识为# 官网:https://yaml.org/
-
Yaml 安装
$ pip3 install PyYaml
-
Yaml 快速体验
字典{"name": "test_yaml", "result", "success"}写成Yaml的形式,并输出结果 结构通过空格缩进来展示。
列表里的项用"-"来代表,字典里的键值对用":"分隔.
示例函数:
data.yaml
name: "test_yaml"
result: "success"
demo.py
import yaml
with open("./data.yaml",\'r\') as f:
data = yaml.safe_load(f)
print(data)
运行结果:
{\'name\': \'test_yaml\', \'result\': \'success\'}
2、Yaml 字典和列表介绍
以上是关于Python3+pytest框架系列---2的主要内容,如果未能解决你的问题,请参考以下文章
pytest + yaml 框架 -18.sleep 和skip/skipif 功能实现
pytest系列- pytest+allure+jenkins - 持续集成平台生成allure报告
pytest + yaml 框架 - 3.全局仅登录一次,在用例中自动在请求头部添加Authentication token认证
pytest + yaml 框架 -20.支持全局代理proxies_ip的配置
pytest + yaml 框架 - 3.全局仅登录一次,在用例中自动在请求头部添加Authentication token认证