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基础自学系列

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认证