pytest框架-初识pytest

一.安装pytest:

pip install pytest

二.默认规则:

1. .py文件必须以test_开头或者_test结尾

2. 类名必须以Test开头

3.测试用例必须以test_开头

三.实例写法:

import pytest
import requests
class  TestSend:
    def test_edit_flag(self):
        # 注册接口
        url = "http://127.0.0.1:1234/reg"
        # 上传参数
        date = {
            "username": "123456",
            "password": "123456wh"
        }
        # post请求
        res = requests.post(url, json=date)
        print(res.json())
if __name__ == '__main__':
        pytest.main()

此为标准写法 

注意:若是需要显示打印的语句修改成 pytest.main(【‘-vs’】),这样才会显示打印的语句,否则在方法中打印的语句不显示

演示:

import requests


class TestSend:
    def test_get_token(self):
        url = "http://127.0.0.1:1234/reg"
        data = {
            "username": "admin",
            "password": "1admin23"
        }
        rep = requests.post(url,data=data)
        content = rep.content.decode("utf-8-sig")  # 去掉UTF-8 BOM,否则会出现报错
        token = rep.json()['token'] #获取用户token
        print(json.loads(content))

    def test_edit_flag(self):
        # 注册接口
        url = "http://127.0.0.1:1234/reg"
        # 上传参数
        date = {
            "username": "123456",
            "password": "123456wh"
        }
        # post请求
        res = requests.post(url, json=date)
        print(res.json())


if __name__ == '__main__':
    pytest.main(['-vs'])

# 发送post请求只需要传date或者是json其中一个
# urlpost = "http://cloud.qishanyundao.com/canteen_admin/src/request/auth2.php"
# datapost = {"tag": {
#     "username": "admin",
#     "password": "1admin23"
# }}
# rep= requests.post(urlpost,datapost)
# print(rep.json())

在以上数据中第一个方法中的token在第二个方法中是无法访问的,因为他们并不处于一种方法里面,咱们可以在变量名前面加上类名.后设置一个类变量就可以访问了

实例:

import json

import pytest
import requests


class TestSend:
    token = ""  #类变量
    def test_get_token(self):
        url = "http://cloud.qishanyundao.com/canteen_admin/src/request/auth2.php"
        data = {
            "username": "admin",
            "password": "1admin23"
        }
        rep = requests.post(url,data=data)
        content = rep.content.decode("utf-8-sig")  # 去掉UTF-8 BOM,否则会出现报错
        json_data = json.loads(content)#content为字符串对象有json方法
        TestSend.token = json_data['token']#jsondata是字典对象没有json方法
        print(json.loads(content))

    def test_edit_flag(self):
        # 注册接口
        url = "http://127.0.0.1:1234/reg"
        # 上传参数
        date = {
            "username": "123456",
            "password": "123456wh"
        }
        # post请求
        res = requests.post(url, json=date)
        print(res.json())
        print(TestSend.token) #打印类变量


if __name__ == '__main__':
    pytest.main(['-vs'])

注意:

get请求通过params传递参数

post请求通过json或者data传递参数

data:

数据报文:dict字典类型的,那么默认情况下请求头为applilcation-www-from-urlencoded,表示以from进行传参,格式为:a=1&b=2  

数据报文:str类型,那么默认情况下:test/plain

json:

数据报文:不管是字典还是字符串类型,默认都是application/json,格式{“a”:1,"b":2}

以下两个方法是用户Json数据转换时常用的方法

json.dumps(data)//序列化可以把字典转化为字符串
json.loads(data)//反序列化可以把字符串转化为字典

总结:

data只能传输简单的只有键值对的字典或者字符串格式

json只能传输字典格式或者简单的嵌套关系

文件上传:

    def test_file_uplosd(self):
        url= "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN"
        date={
            "access_token":"",
            "media":"" #这个内容传输的是文件的路径,使用open(r"文件路径")来选择文件路径
        }
        rep= requests.post(url,files=date)#文件传输使用files进行传参
        print(rep.json())

上述为上传文件的实例 

当需要请求需要带请求头的接口怎么写

    #请求需要带请求头的接口
    def test_login(self):
        url="http://127.0.0.1/phpwind/"
        data={
            "username":"",
            "password":""
        }
        headers = {
            "Accept":"application/json",
            "X-re":"XML"

        }
        rep = requests.post(url,data=data,headers=headers)#添加请求头的方式
        print(rep.json())

请求网页接口都需要进行cookie鉴权 仅靠cookie鉴权并不常用

但是值得注意的是一般来说,都是通过session实现cookie鉴权的

接口自动化框架封装,统一请求方式:

requests.request()  请求方式都换为此方法,之后在方法里面写get或者是post等请求方式

获取session对象,然后使用对象发送请求,实例如下

    def get_session(self):
        session = requests.session()
        return session

    def test_get_token(self):
        url = "http://cloud.qishanyundao.com/canteen_admin/src/request/auth2.php"
        data = {
            "username": "admin",
            "password": "1admin23"
        }
        rep = self.get_session().request("post",url, data=data)#用session方法发送请求
        content = rep.content.decode("utf-8-sig")  # 去掉UTF-8 BOM,否则会出现报错
        json_data = json.loads(content)  # content为字符串对象有json方法
        TestSend.token = json_data['token']  # jsondata是字典对象没有json方法
        TestSend.cookie = rep.cookies
        print(json.loads(content))

此方式就不需要获取cookie了,不同的项目不受影响

session = requests.session()
    def test_get_token(self):
        url = "http://cloud.qishanyundao.com/canteen_admin/src/request/auth2.php"
        data = {
            "username": "admin",
            "password": "1admin23"
        }
        rep = TestSend.session.request("post",url, data=data)
        content = rep.content.decode("utf-8-sig")  # 去掉UTF-8 BOM,否则会出现报错
        json_data = json.loads(content)  # content为字符串对象有json方法
        TestSend.token = json_data['token']  # jsondata是字典对象没有json方法
        TestSend.cookie = rep.cookies
        print(json.loads(content))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值