第二周_自动化接口测试:requests库使用

目录:

一. 第一周_接口手工测试:网络基础知识、抓包、Postman回顾,Pycharm安装教程和问题

二. Requests库介绍

三. 请求发送

四. 响应解析

五. 参数化

六. 断言

七. 其他(认证/关联/异步接口)

 

一、第一周_接口手工测试:网络基础知识、抓包、Postman回顾

第二周_自动化接口测试:requests库使用

第二周_自动化接口测试:requests库使用

第二周_自动化接口测试:requests库使用

第二周_自动化接口测试:requests库使用第二周_自动化接口测试:requests库使用第二周_自动化接口测试:requests库使用

Pycharm安装教程和问题

Pycharm安装教程

安装:https://www.cnblogs.com/QYGQH/p/7569769.html

第二周_自动化接口测试:requests库使用

 第一步:打开界面

第二周_自动化接口测试:requests库使用第二周_自动化接口测试:requests库使用

 第二步:选择代码路径和Python解释器版本

第二周_自动化接口测试:requests库使用

第三步:设置Pycharm菜单字体的大小

第二周_自动化接口测试:requests库使用

第四步:设置编辑器里面字体大小

第二周_自动化接口测试:requests库使用

第五步:设置文件编码

第二周_自动化接口测试:requests库使用

第六步:设置背景颜色

第二周_自动化接口测试:requests库使用

第七步:设置tab键为4个空格

第二周_自动化接口测试:requests库使用

第八步:设置行号

第二周_自动化接口测试:requests库使用

第九步:设置控制台背景颜色

第二周_自动化接口测试:requests库使用

第十步:查看快捷键

第二周_自动化接口测试:requests库使用

快捷键使用:
1. Ctrl + D:复制当前行
2. Ctrl + Y:删除当前行
3. Ctrl + Z 撤销
4. Shift + Enter:快速换行
5. Ctrl + /:快速注释
6. Ctrl + F: 查找
7. Ctrl + H: 替换
8. Tab: 缩进
9. Shift + Tab:取消缩进
10. Ctrl +减号:折叠当前代码块
11. Ctrl +加号:展开当前代码块
12. Ctrl +Shift+减号:整个文件全部折叠
13. Ctrl +Shift+加号:整个文件全部展开

Pycharm常见问题

Pycharm专业版激活
1. 使用前将“0.0.0.0 account.jetbrains.com”添加到hosts文件中
2. 使用激活码激活

第一,Pycharm通过鼠标滚轮放大缩小字体

第二周_自动化接口测试:requests库使用

第二,安装第三方包

第二周_自动化接口测试:requests库使用

第三,避免导包问题,需要把将每一天的文件夹标记为"Sources Root"(标记代码目录为“源码目录”)

第二周_自动化接口测试:requests库使用

第四,使用pip在命令行中安装了包, 在Pycharm中导入报错

原因:Pycharm新建项目时默认使用虚拟环境,虚拟环境的包和“真实环境”的包是隔离的,使用pip默认安装到“真实环境”中,此时虚拟环境中是没有该包的
解决方法:在Pycharm设置安装包

第五,包/模块导入报错

解决方法:

1. 检查该文件或该目录下同级文件是否有和所导入包重名的文件
2. 个人使用的文件名不要和系统存在的包、三方包等重名,建议个人新建的文件使用两个以上英文单词,如requests_demo.py

二、Requests库介绍

  Requests库介绍

  Requests是一个非常简单容易使用的HTTP请求发送库,结构清晰,功能完善,非常容易上手。
  安装方法
  pip install requests
  请求
  请求方法: 用于发送不同的请求(GET/POST/PUT/…)
  请求参数: 请求方法中的参数(url/params/data…)
  响应
  获取相应对象: res = requests.get(….) # 自定义一个变量res接收响应对象
  响应解析: res.headers/res.status_code/res.text

  Requests库介绍: 请求方法
  请求方法
  res = requests.get(url, ...):发送get请求
  requests.post(url,...):发送post请求
  requests.put(url,...):发送put请求
  ......
  requests.request(url, method,...): 通用的请求方法,支持各种请求
  requests.session(): 用于保持会话(session)
  除了requests.session()外,其他请求方法requests.get/post/put/...的参数都一样,都包含url,params, data, headers, cookies, files, auth, timeout等等

  Requests库介绍: 请求参数

  请求参数
  url:字符串格式,参数也可以直接写到url中
  params:url参数,字典格式
  data:请求数据,字典或字符串格式(需手动编码和指定内容类型)
  headers:请求头,字典格式
  cookies:字典格式 (也可以使用字符串放在headers中)
  files:字典格式,用于混合表单(form-data)中上传文件
  auth:Basic Auth授权,数组格式 auth=(user,password)
  timeout:超时时间(防止请求一直没有响应,最长等待时间),数字格式,单位为秒
  proxy=():使用代理
  verify=False :是否验证HTTPS证书,默认是True
  参数的两种写法
  requests.get(‘http://www.baidu.com’,{…}) # 只有url时可这样使用
  requests.get(url=‘http://….’, params={}…) # 推荐格式

  Requests库介绍: 响应解析

  响应解析
  res.status_code:响应的HTTP状态码
  res.reason:响应的状态码含义
  res.text:响应的文本格式,按res.encoding解码
  res.content:响应的二进制格式
  res.encoding:解码格式,可以通过修改res.encoding=‘utf-8‘来解决一部分中文乱码问题
  res.apparent_encoding:真实编码,由charset库提供的明显编码
  res.json():(注意,有括号),响应的json对象(字典)格式,慎用!如果响应文本不是合法的json文本,或报错
  res.headers:响应头
  res.cookies:响应的cookieJar对象,可以通过res.cookies.get(key)来获取响应cookies中某个key对应的值

# 1.导入requestsimport requests# 2.组装请求报文并发送response = requests.get(‘http://httpbin.org/get‘)# 3.解析响应print(response.status_code)  # 状态码print(response.text)  # 响应数据(文本格式)

写成函数形式:

# 1.导入requestsimport requests
# 练习1  get请求def get_01():    # 2.组装请求报文并发送    response = requests.get(‘http://httpbin.org/get‘)    # 3.解析响应    print(response.status_code)  # 状态码    print(response.text)  # 响应数据(文本格式)get_01()
# 练习2  带参数get请求def get_02():    # url = ‘http://www.tuling123.com/openapi/api?key=ec961279f453459b9248f0aeb6600bbe&info=你好‘    url = ‘http://www.tuling123.com/openapi/api‘    p = {‘key‘: ‘ec961279f453459b9248f0aeb6600bbe‘, ‘info‘: ‘你好‘}  # 字典变量    response = requests.get(url, params=p)    print(response.status_code)  # 状态码    print(response.text)  # 响应数据(文本格式)
get_02()
# 练习3  加法运算,带参数get请求def get_03():    url = ‘http://115.28.108.130:5000/add/‘    p = {‘a‘: 1, ‘b‘: 2}  # 字典变量    response = requests.get(url, params=p)    print(response.status_code)  # 状态码    print(response.text)  # 响应数据(文本格式)get_03()
# 练习4  post请求,纯文本表单格式def post_form01():    """纯文本表单格式Content-Type:application/x-www-form-urlencoded"""    url = ‘http://115.28.108.130:5000/api/user/login/‘    data = {        ‘name‘: ‘张三‘,        ‘password‘: ‘123456‘    }  # 字典类型的请求数据    response = requests.post(url, data=data)  # data接受字典格式的数据是会进行url编码    print(response.text)post_form01()
# 练习5  post请求,纯文本表单格式def post_form02():    url = ‘http://httpbin.org/post‘    data = {        ‘name‘: ‘kevin‘,        ‘age‘: ‘21‘,        ‘gender‘: ‘male‘    }    response = requests.post(url, data=data)    print(response.text)post_form02()
# 练习6def post_json03():    url = ‘http://115.28.108.130:5000/api/user/reg/‘    # 字典 True/False/None-->JSON true/false/null    play_load = {        "name": "张三",        "password": "123456"    }    res = requests.post(url, json=play_load)    print(res.text)  # 响应的文本格式    print(res.json())  # 将响应文本转化为字典,只有当响应数据是json格式时才能转为字典,否则会报错    res_dict = res.json()    print(res_dict[‘code‘])    print(res_dict[‘msg‘])    print(res_dict[‘data‘][‘name‘])post_json03()
# 练习7def add_card_json():    url = ‘http://115.28.108.130:8080/gasStation/process‘    play_load = {        "dataSourceId": "bHRz",        "methodId": "00A",        "CardInfo": {            "cardNumber": "0100020"        }    }    response = requests.post(url, json=play_load)    print(response.json())    print(response.text)add_card_json()
# 练习8def put_xml():    """发送xml格式的数据(发送原始格式的数据)"""    url = ‘http://httpbin.org/put‘    play_load = ‘‘‘        <xml>           <msg>hello</msg>        </xml>‘‘‘    headers = {"Content-Type": "application/xml"}  # 使用原始格式发送时应手动在请求头中指定内容类型    res = requests.put(url, data=play_load, headers=headers)  # 当赋给data以字符串格式的话,会原样发送    print(res.json())    print(res.text)put_xml()
# 练习9"""三个双引号:用来作为函数的功能说明"""‘‘‘三个单引号:用于多行文本‘‘‘def post_json():    """发送json格式的数据(发送原始格式的数据)"""    url = ‘http://115.28.108.130:5000/api/user/reg/‘    play_load = ‘‘‘{            "name": "张三",            "password": "123456"        }‘‘‘.encode(‘utf-8‘).decode(‘latin-1‘)    headers = {"Content-Type": "application/json"}  # 使用原始格式发送时应手动在请求头中指定内容类型    res = requests.post(url, data=play_load, headers=headers)  # 当赋给data以字符串格式的话,会原样发送    print(res.json())    print(res.text)post_json()
# 练习10def post_file():    """上传文件接口"""    url = ‘http://115.28.108.130:5000/api/user/uploadImage/‘    files = {‘file‘: open(r‘C:\Users\Administrator\Desktop\1.png‘, ‘rb‘)}  # ‘rb‘是以2进制格式打开    res = requests.post(url=url, files=files)    print(res.text)post_file()
# 练习11  发送请求并获取响应对象def get_baidu():    url = ‘https://www.baidu.com‘    res = requests.get(url)    print(res.status_code, res.reason)  # 200 OK    # print(res.json())  # 会报错    print(res.text)  # 文本格式,有乱码    print(res.content)  # 二进制格式    print(res.encoding)  # 查看解码格式 ISO-8859-1    print(res.apparent_encoding)  # utf-8    res.encoding = ‘utf-8‘   # 手动设置解码格式为utf-8    print(res.text)  # 乱码问题被解决    print(res.headers)  # 会报错    print(res.cookies.items())  # cookies中的所有的项 [(‘BDORZ‘, ‘27315‘)]    print(res.cookies.get("BDORZ"))  # 获取cookies中BDORZ所对应的值 27315get_baidu()
# 练习12# 关联/接口依赖----------------------------------------def post_session():    """会话保持"""    session = requests.session()  # 新建一个会话    # 第一个请求----------------------------------------    url = ‘http://115.28.108.130:5000/api/user/login/‘    data = {        ‘name‘: ‘张三‘,        ‘password‘: ‘123456‘    }    response = session.post(url, data=data)    print(response.text)    # 第二个请求----------------------------------------    url = ‘http://115.28.108.130:5000/api/user/getUserList‘    response = session.get(url)    print(response.text)post_session()
# 练习14def post_cookies():    url = ‘http://115.28.108.130:5000/api/user/login/‘    data = {        ‘name‘: ‘张三‘,        ‘password‘: ‘123456‘    }    response = requests.post(url, data=data)    print(response.text)    print(response.cookies)    url = ‘http://115.28.108.130:5000/api/user/getUserList‘    response = requests.get(url, cookies=response.cookies)    print(response.text)post_cookies()

三、请求发送

2

四、响应解析

3

五、参数化

1

六、断言

1

七、其他(认证/关联/异步接口)

1