Python中的requests库

1、测试框架的基本功能

项目管理:pip、virtualenv

用例编写:pytest

领域能力:app、web、http

执行调度:pytest、pycharm、shell、Jenkins

测试报告:allure2

2、http测试能力

请求方法构造:get、post、put、delete、head

请求体构造:form、json、xml、binary

响应结果分析:status code、response body、json path、XPath

3、requests的特点

功能全面:http/https支持全面

使用简单:简单易用,不需要关心底层细节

定制性高:借助hook机制完成通用处理

4、简单测试用例举例

import requests


# https://httpbin.testing-studio.com/
class TestDemo:
    def test_get(self):
        r = requests.get("https://httpbin.testing-studio.com/get")
        print(r.text)
        print(r.json())
        print(r.status_code)
        assert r.status_code == 200

5、构造一个完整的请求

(1)请求目标构造

    r = requests.get("http://httpbin.testing-studio.com/get")

(2)请求参数构造

get query:path  query

post body:form、结构化请求JSON、binary二进制

举例见下方代码

举例1:get query

举例2:form请求参数构造

举例3:文件上传

files={'file':open('1.text','rb')}
r.requests.post(url,files=file)
    def test_file(self):
        file={"file":open('1.text','rb')}
        r=requests.post("https://httpbin.testing-studio.com/post",files=file)
        print(r.text)

(3)请求体

(4)请求头

普通header:

headers={'user-agent':'my-app/0.0.1'}

r=requests.get(url,headers=headers)

cookie:

cookies=dict(cookies_are='working')

r=requests.get(url,cookies=cookies)

import requests


# https://httpbin.testing-studio.com/
class TestDemo:
    def test_get(self):
        r = requests.get("https://httpbin.testing-studio.com/get")
        print(r.text)
        print(r.json())
        print(r.status_code)
        assert r.status_code == 200

    # get query请求构造
    def test_get_query(self):
        payload = {
            "level": 1,
            "name": "seveniruby"
        }
        r = requests.get("https://httpbin.testing-studio.com/get", params=payload)
        print(r.text)
        assert r.status_code == 200

    # form请求参数构造
    def test_post_form(self):
        payload = {
            "level": 1,
            "name": "seveniruby"
        }
        r = requests.post("https://httpbin.testing-studio.com/post", data=payload)
        print(r.text)
        assert r.status_code == 200

    def test_headers(self):
        headers = {
            "h": "demo"
        }
        r = requests.get("https://httpbin.testing-studio.com/get", headers=headers)
        print(r.text)
        print(r.json())
        print(r.status_code)
        assert r.status_code == 200
        assert r.request.headers["h"] == "demo"

6、响应结果断言

r.url   响应的URL

r.status_code  响应的状态码

r.headers  响应头

r.cookies  cookies信息

r.text=r.encoding+r.content

r.json()=r.encoding+r.content+content type json

r.raw.read(10)

对应得请求内容 r.request

7、结构化请求体构造 json

JSON及断言

代码示例

    def test_post_json(self):
        payload = {
            "level": 1,
            "name": "seveniruby"
        }
        # 会自动转为json格式
        # 响应里    "Content-Type": "application/json", 
        r = requests.post("https://httpbin.testing-studio.com/post", json=payload)
        print(r.text)
        assert r.status_code == 200
        assert r.json()['json']['level'] == 1

jsonpath断言

    def test_hog_json(self):
        r=requests.get('https://ceshiren.com/categories.json')
        print(r.text)
        assert r.status_code==200
        assert r.json()['category_list']['categories'][0]['name']=='开源项目'
        print(jsonpath(r.json(),'$..name'))
        assert jsonpath(r.json(),'$..name')[0]=='开源项目'

8、schema校验

JSON Schema | The home of JSON Schema

自动校验:

  • 每次运行会自动保存当前的schema
  • 下次运行对比上次的schema如果发现变更就报错
  • saveSchema+diffSchema
    def test_jsonschema(self):
        url="https://ceshiren.com/categories.json"
        data=requests.get(url=url).json()
        print(data)
        schema=json.load(open("topic_schema.json"))
        validate(data,schema=schema)

9、http cookie

cookie使用场景:

需求请求需要cookie,所以在构造接口测试用例时加入cookie

传递cookie的两种方式:

请求体信息:自定义header传递

请求关键字cookies传递

代码示例:


import requests
def test_cookie():
    url="https://httpbin.testing-studio.com/cookies"
    header={"Cookie":"hoo=school",'User-Agent': 'python-requests'}
    r=requests.get(url=url,headers=header)
    print(r.request.headers)

def test_cookie1():
    url="https://httpbin.testing-studio.com/cookies"
    header={'User-Agent': 'python-requests'}
    cookie_data={"hog":"12345"}
    r=requests.get(url=url,headers=header,cookies=cookie_data)
    print(r.request.headers)
    print(r.request.headers["Cookie"])

10、http认证体系

http basic

基本认证 是允许http用户代理在请求时,提供用户名和密码的一直方式

主要是认证

Authorization:Basic xxxxxxxxxxxxxxxxxx

代码示例

import requests
from requests.auth import HTTPBasicAuth


def test_auth():
    url = "https://httpbin.testing-studio.com/basic-auth/demaxiya/111"
    r = requests.get(url=url, auth=HTTPBasicAuth("demaxiya", "111"))
    print(r.text)

加密接口

创建json文件

{
  "topics": {
    "orange": "movie",
    "shool": "testing-studio",
    "president": "seveniruby"
  }
}

对文件进行base64加密

ew0KICAidG9waWNzIjogew0KICAgICJvcmFuZ2UiOiAibW92aWUiLA0KICAgICJzaG9vbCI6ICJ0ZXN0aW5nLXN0dWRpbyIsDQogICAgInByZXNpZGVudCI6ICJzZXZlbmlydWJ5Ig0KICB9DQp9

使用Python命令行创建一个http地址

python -m http.server 9999
 

处理加密接口的原理或方法

1、已知加密算法,使用对应解密算法

2、未知加密算法,需要研发提供加解密的lib

3、如果不是通用加密算法,研发也无法提供,那么让加密发提供远程解析服务,算法依然保密

多环境的接口测试

实现原理

在请求之前,对请求的URL进行替换

1、需要二次封装requests,对请求进行定制化

2、将请求的结构体的URL参数化

3、使用env配置文件

4、将请求体的URL替换成env配置文件中个人选择的URL

5、将env配置文件使用yaml进行管理

算法测试脚本(待定)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值