python + request的基础复习20220816(持续更新。。。)

前后端分离的处理过程:

  前端发送的请求内容---网络协议(媒介)---服务器端接收处理请求的地方(接口)---进行运算,产出结果,生成响应内容-----网络协议(介质)---返回响应(前端展示出来)

请求(request):用户下发

网络协议:传输渠道,目前业内最为核心的是HTTP协议

接口:接收从传输渠道传递过来的请求数据

响应:接口运算的结果,会在执行之后返回至前端

 

实际请求下发可以不需要经过前端界面,例如:

     登录操作:

    输入账号--提交表单--校验--返回登录成功或失败

开展接口测试的原因:

  1、为了确保系统的安全

  2、能够更早介入测试工作,从而降低缺陷的修复成本

  3、尽可能多地发现系统中存在的问题

  4、接口是目前企业需求量特别大的测试手段,也是测试人员加薪利器

如何实现接口测试:

  模拟请求,直接下发至接口、获取返回响应、校验响应内容是否正确。

  postman、Jmeter、LR、Requests都是用于模拟请求和接收响应的形式。 

网络协议:HTTP是核心的协议

  1、规范

    url=网络协议://IP:port/path?args1=1&args2=2

  2、基本信息:

    http端口默认80

    https端口默认443   

 

之前有记录,https://www.cnblogs.com/ww-xiaowei/p/15851004.html
接口自动化------------------------------------------------------
动态参数处理:通过自带的函数,时间戳函数,随机数函数


1、基础知识
理解cookie,session,token授权原理及实战
理解http、webservice、Dubbo接口协议
2、API接口的概念和接口测试的概念
3、API接口测试计划,测试流程以及测试策略方案
4、API接口测试用例设计
5、API接口测试执行
6、API接口测试报告

一、既然有工具类实现接口自动化,为什么还要做自动化?

工具类的弊端(Jmeter+git+Jenkins):
团队协作(即使用git,也可能无法满足协作)
功能太死板(复杂的加密接口,签名接口等)
排错,定位接口问题不方便

市场需求:
1、接口数量大了以后,要团队协作编写时,版本管理方便。
2、可以复用的功能,可以抽象出来,再维护时仅修改公共方法,很方便
3、支持多种不同协议
4、多接口串联(参数传递)
5、数据库验证,日志监控。
6、web自动化+接口自动化 组合的需求

二、Python+requests模块
requests第三方库,主要用于发送http请求,做接口自动化。
pip install requests

三、requests全局观
发送请求rep=requests.request()
发送post\get\put\delete请求
【reponse对象】
rep.text 返回的字符串的数据
rep.content 返回字节格式的数据
rep.json 返回字典格式的数据
rep.status_code 返回状态码
rep.reason 返回状态信息
rep.cookies 返回cookie信息
rep.encoding 返回编码格式
rep.headers 返回响应header信息

响应状态码:用于表示本次请求的发送是否完成,完成状态是什么?

    2**:表示成功

    3**:表示重定向

    4**:表示路径错误

    5**:表示服务器端异常

 

四、接口实战
请求方式:get、post、delete、put
请求参数类型:键值对、json格式、文件格式

注意:get 请求通过param来传递参数

post 请求通过json 或 data 传参
rep=requests.get(url=host+path_preLogin,param=param,headers=headers)
rep=requests.post(url=host+path_preLogin,data=param,headers=headers)
rep=requests.post(url=host+path_preLogin,json=param,headers=headers)

json.dumps(data) 字典转换为string类型
json.loads(data) str转换为字典格式


data只能传简单的只有键值对的dict(只有1层无嵌套的) 或者是str格式
json 一般只能传dict 格式(简单 和 嵌套都可以)

 

线性脚本:No (面向过程)
用pytest 用例管理框架:
默认规则,编写格式要求:
1、py文件必须以 test_开头 或者_test结尾。
2、类名必须以Test开头
3、测试用例(方法名)必须以tet_开头


【4.1】pytest用例管理框架
安装pytest:pip install pytest
pytest搜集用例的默认规则:
1.py文件必须以test_开头 或者 _test结尾。
2.类名必须以Test开头
3.测试用例必须以test_ 开头

 

参照:https://www.bilibili.com/video/BV1B34y1Y7Rq?p=5&spm_id_from=pageDriver

 

【4.2】Python中 参数传递

 【4.2.1】 定义类属性,(类变量)

复制代码
import pytest
import requests

class TestSession:
    #类变量:通过类名访问
    access_token =''
    def test_session(self):
        #组装参数
        host="https://open.sit.fuseinsurtech.com"
        path_preLogin='/insurance-finance-vs-api/api/fuse/user/login'
        param={
            "udid":"55385F93-8A5E-4859-B690-F5CEB0F18619",
            "loginPassWord":"457948",
            "phoneType":"iPhone 6",
            "netType":"Wifi",
            "loginWay":0,
            "countryCode":"02130000000000",
            "deviceId":"55385F93-8A5E-4859-B690-F5CEB0F18619",
            "deviceType":"iOS",
            "loginCity":"四川省成都市",
            "systemVersion":"12.5.5",
            "osVision":"12.5.5",
            "loginCid":"510100",
            "vision":"3.16.27",
            "customPhone":"628123457948",
            "loginIp":"61.157.13.52",
            "phoneModel":"iPhone 6",
            "model":"iOS",
            "loginVerifyCode":"",
            "appVersion":"3.16.27"
        }
        headers={
            "Connection":"keep-alive",
            "appVersion": "3.16.27",
            "appVersionNumber": "30160027",
            "content-type":"application/json",
            "clienttype":"ANDROID",
            "timezone":"UTC+8",
            "language":"en_US",
            "accept-encoding":"gzip",
            "charset":"utf-8",
            "fusetoken":""
        }
        #post(url, data=None, json=None, **kwargs):
        rep=requests.post(url=host+path_preLogin,json=param,headers=headers)
        print(rep.status_code)
        print(rep.content)
        print(rep.json())
        got_session = rep.json()['resultObj']['userTokken']
        TestSession.access_token = rep.json()['resultObj']['userTokken']

if __name__ == '__main__':
    c = TestSession()
    c.test_session()
    # pytest.main()
复制代码

 

cookie鉴权:网页的接口基本上都要cookie鉴权
rep = request.post(url,data=data,headers=headers,cookies=TestSendRequest.cks) #是TestSendRequest.cks 是类变量 或类属性

【To do】cookie鉴权的方式【?】 搞一下web后台登陆后,新增user的接口

【TO do】通过session实现cookie 鉴权,这种常用。【?】APP 登陆接口+APP下单接口

实际运用中:APP的接口间用的token鉴权,放在请求header中的~,用不到session、cookie鉴权

可以参照:https://blog.csdn.net/chairongdian/article/details/124478670

 

  参照:(https://www.bilibili.com/video/BV1B34y1Y7Rq?p=5&spm_id_from=pageDriver&vd_source=8c511af054d2d9daf9ba0c04e53137c8)

【TO do】接口自动化框架封装的第一步,就是统一请求方式。
rep = requests.request("post",url=host+path_preLogin,json=param,headers=headers)
rep = requests.request("get",url=host+path_preLogin,param=param,headers=headers)

 

用例管理框架:Python脚本,对应的框架:unittest 或pytest java 语言,对应的框架:Junit 或 testng

4.3 【 多线程 运行】

https://www.bilibili.com/video/BV1B34y1Y7Rq?p=9&spm_id_from=pageDriver&vd_source=8c511af054d2d9daf9ba0c04e53137c8

由运行方式控制:

1、main 主函数运行(命令行的方式)  pytest.main(['-vs','-n=2','--rerun=2','--html=./report/result.html'])

-v 输出更加详细的运行信息

-s 输入调试信息

-n 多线程运行

--reruns 数字   失效用例重跑

--html=报告的路径

2、实际工作中使用pytest.ini 的配置文件来配置运行。

4.4 【 Yaml 数据关联】

https://www.bilibili.com/video/BV1B34y1Y7Rq?p=14&vd_source=8c511af054d2d9daf9ba0c04e53137c8

posted @   幸福在今天  阅读(208)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
历史上的今天:
2019-07-23 【转】局部变量和全局变量---------------【答不对,你还敢说你精通、熟悉python?】
点击右上角即可分享
微信分享提示