1. 接口基础知识

1.1 接口分类

接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。

(1) webservice接口:走soap协议通过http传输,请求报文和返回报文都是xml格式的,我们在测试的时候都要通过工具才能进行调用,测试。

(2) http api 接口:走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和post等方法。

1.2 接口请求类型

根据接口的请求方法,常用的几种接口请求方式:

(1) GET:从指定资源获取数据

(2) POST:向指定的资源请求被处理的数据(例如用户登录)

(3) PUT:上传指定的URL,一般是修改,可以理解为数据库中的 update

(4) DELETE:删除指定资源

2、Requests 快速上手

2. requests基础

所有的数据测试目标以一个开源的接口模拟网站【HTTPBIN】为测试对象。

2.1 发送请求

#!/usr/bin/env python

# -*- encoding: utf-8 -*-

"""

@File : requests_send_request.py

@Time : 2019/9/2 11:54

@Author : Crisimple

@Github : https://crisimple.github.io/

@Contact : Crisimple@foxmail.com

@License : (C)Copyright 2017-2019, Micro-Circle

@Desc : None

"""

import requests

# 1.requests请求方式

# (1) GET请求方式

httpbin_get = requests.get('http://httpbin.org/get', data={'key': 'value'})

print('httpbin_get: ', httpbin_get.text)

# (2) POST请求方式

httpbin_post = requests.post('https://httpbin.org/post', data={'key': 'value'})

print('httpbin_post: ', httpbin_post.text)

# (3) PUT请求方式

httpbin_put = requests.put('https://httpbin.org/put', data={'key': 'value'})

print('httpbin_put: ', httpbin_put.text)

# (4) DELETE请求方式

httpbin_delete = requests.delete('https://httpbin.org/delete', data={'key': 'value'})

print('httpbin_delete', httpbin_delete)

# (5) PATCH亲求方式

httpbin_patch = requests.patch('https://httpbin.org/patch', data={'key': 'value'})

print('httpbin_patch', httpbin_patch)

2.2 参数传递

常用的参数传递形式有四种:【GitHub示例】

(1)字典形式的参数:payload = {'key1': 'value1', 'key2': 'value2'}

(2) 元组形式的参数:payload = (('key1', 'value1'), ('key2', 'value2'))

(3) 字符串形式的参数:payload = {'string1', 'value1'}

(4) 多部份编码的文件:files = {

# 显示设置文件名、文件类型和请求头

'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})

}

#!/usr/bin/env python

# -*- encoding: utf-8 -*-

"""

@File : requests_transfer_parameter.py

@Time : 2019/9/2 12:39

@Author : Crisimple

@Github : https://crisimple.github.io/

@Contact : Crisimple@foxmail.com

@License : (C)Copyright 2017-2019, Micro-Circle

@Desc : 参数传递:字典、元组、字符串、文件

"""

import requests

# 2. 参数传递

# (1) 传参参数为字典形式: 数据字典会在发送请求时会自动编码为表单形式

def transfer_dict_parameter():

payload = {

'key1': 'value1',

'key2': 'value2'

}

transfer_dict_parameter_result = requests.post('https://httpbin.org/post', params=payload)

print("transfer_dict_parameter_url: ", transfer_dict_parameter_result.url)

print("transfer_dict_parameter_text: ", transfer_dict_parameter_result.text)

transfer_dict_parameter()

# (2) 传参参数为元组形式: 应用于在表单中多个元素使用同一 key 的时候

def transfer_tuple_parameter():

payload = (

('key1', 'value1'),

('key1', 'value2')

)

transfer_tuple_parameter_result = requests.post('https://httpbin.org/post', params=payload)

print('transfer_tuple_parameter_url: ', transfer_tuple_parameter_result.url)

print('transfer_tuple_parameter_text: ', transfer_tuple_parameter_result.text)

transfer_tuple_parameter()

# (3) 传参参数形式是字符串形式

def transfer_string_parameter():

payload = {

'string1': 'value'

}

transfer_string_parameter_result = requests.post('https://httpbin.org/post', params=payload)

print('transfer_string_parameter_url: ', transfer_string_parameter_result.url)

print('transfer_string_parameter_text: ', transfer_string_parameter_result.text)

transfer_string_parameter()

# (4) 传参参数形式:一个多部分编码(Multipart-Encoded)的文件

def transfer_multipart_encoded_file():

interface_url = 'https://httpbin.org/post'

files = {

# 显示设置文件名、文件类型和请求头

'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})

}

transfer_multipart_encoded_file_result = requests.post(url=interface_url, files=files)

print('transfer_multipart_encoded_file_result_url: ', transfer_multipart_encoded_file_result.url)

print('transfer_multipart_encoded_file_result_url: ', transfer_multipart_encoded_file_result.text)

transfer_multipart_encoded_file()

2.3 接口响应

给接口传递参数,请求接口后,接口会给我们我们响应返回,接口在返回的时候,会给我们返回一个状态码来标识当前接口的状态。

(1)状态码

【GitHub示例】

| 状态码 | 状态 | 描述 |

---------- | ----- | ------

1xx | ---- |信息类的状态码 **

| 100 | Continue | 服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求。

| 101 | Switching Protocols | 服务器转换协议,服务器将遵从客户的请求转换到另外一种协议

**2xx | ---- |*成功类的状态码 *

| 200 | OK | 请求成功(是对 GET 或 POST 的请求应答文档)

| 201 | Created | 请求被创建完成,同时信的资源被创建

| 202 | Accepted | 供处理的请求已被接收,但是处理未完成

| 203 | Non-authoritative Information | 文档已正常地返回,但一些应答头可能不正确,以为使用的式文档的拷贝

| 204 | No Content | 没有新文档。浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。

| 205 | Reset Content | 没有新文档。但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容。

| 206 | Partial Content | 客户发送了一个带有Range头的GET请求,服务器完成了它。

#!/usr/bin/env python

# -*- encoding: utf-8 -*-

"""

@File : response_code.py

@Time : 2019/9/2 15:41

@Author : Crisimple

@Github : https://crisimple.github.io/

@Contact : Crisimple@foxmail.com

@License : (C)Copyright 2017-2019, Micro-Circle

@Desc : None

"""

import requests

# 1. 返回接口状态码:200

def response_200_code():

interface_200_url = 'https://httpbin.org/status/200'

response_get = requests.get(interface_200_url)

response_get_code = response_get.status_code

print('response_get_code: ', response_get_code)

response_200_code()

# 2.返回接口状态码:400

def response_400_code():

interface_400_url = 'https://httpbin.org/status/400'

response_get = requests.get(interface_400_url)

response_get_code = response_get.status_code

print('response_get_code: ', response_get_code)

response_400_code()

(2)响应头

#!/usr/bin/env python

# -*- encoding: utf-8 -*-

"""

@File : response_content.py

@Time : 2019/9/2 15:41

@Author : Crisimple

@Github : https://crisimple.github.io/

@Contact : Crisimple@foxmail.com

@License : (C)Copyright 2017-2019, Micro-Circle

@Desc : None

"""

import requests

# 1. 返回接口状态码:

# (1). 返回接口状态码:200

def response_200_code():

interface_200_url = 'https://httpbin.org/status/200'

response_get = requests.get(interface_200_url)

response_get_code = response_get.status_code

print('response_get_code: ', response_get_code)

response_200_code()

# (2).返回接口状态码:400

def response_400_code():

interface_400_url = 'https://httpbin.org/status/400'

response_get = requests.get(interface_400_url)

response_get_code = response_get.status_code

print('response_get_code: ', response_get_code)

response_400_code()

# (3) 重定向接口返回状态码:301

def response_301_code():

interface_url = 'https://butian.360.cn'

response_get = requests.get(interface_url)

response_get_code = response_get.status_code

print('response_get_code: ', response_get_code)

response_301_code()

# ------------------------------------------------------

# 2. 响应内容

  响应内容的请求头、查看文本、编码方式、二进制响应、原始响应。

def response_contents():

url = 'https://httpbin.org/get'

response_get = requests.get(url=url)

# 响应头

print('response_get_headers', response_get.headers)

# 响应文本

print('response_get_text: ', response_get.text)

# 文本编码方式

print('response_get_encoding: ', response_get.encoding)

# 二进制响应内容

print('response_get_content: ', response_get.content)

# 原始响应内容

origin_content = response_get.raw

origin_content_read = origin_content.read(10)

print('origin_content: ', origin_content)

print('origin_content_read: ', origin_content_read)

response_contents()

2.4 接口其他处理

(1) 操作cookies

import requests

import time

url = 'https://httpbin.org/get'

def operator_cookies():

r = requests.get(url)

print('r.cookies: ', r.cookies)

jar = requests.cookies.RequestsCookieJar()

jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies')

jar.set('gross_cookie', 'blech', domain='httpbin.org', path='/elsewhere')

r2 = requests.get(url=url, cookies=jar)

print('r2.text', r2.text)

operator_cookies()

(2) 请求历史

import requests

url = 'https://httpbin.org/get'

def request_history():

r = requests.get(url=url)

print('r.history: ', r.history)

request_history()

(3) 超时请求

requests 在经过 timeout 参数设定的秒数时间之后停止等待响应。

import requests

import time

def timeout():

print(time.time())

url = 'https://httpbin.org/get'

print(time.time())

r = requests.get(url, timeout=5)

print(time.time())

timeout()

(4) 错误与异常

常见的错误异常有:

· 遇到网络问题(如:DNS 查询失败、拒绝连接等时),requests 会抛出一个 ConnectionError 异常。

· 如果 HTTP 请求返回了不成功的状态码, Response.raise_for_status() 会抛出一个 HTTPError异常。

· 若请求超时,则超出一个 Timeout 异常。

· 若请求超过了设定的最大重定向次数,则会抛出一个 TooManyRedirects 异常。

· 所有 Requests 显式抛出的异常都继承自 requests.exceptions.RequestsException。

python 接口自动化_Python 接口自动化测试相关推荐

  1. python怎么写接口自动化_python接口自动化 小结

    requests 发送http请求类型:get.post.put.delete.head get 参数:params 值:字典格式 嵌套列表 array数组 import requests from ...

  2. python自动化接口_Python接口自动化——Web接口

    原标题:Python接口自动化--Web接口 1.2.1 web接口的概念 这里用一个浏览器调试工具捕捉课程管理页面请求作为例子: 当请求页面时,服务器会返回资源,将协议看做是路的话,http可以看做 ...

  3. python+unittest+excel接口自动化_Python+requests+unittest+excel实现接口自动化测试框架

    一.框架结构: 工程目录 二.Case文件设计 三.基础包 base 3.1 封装get/post请求(runmethon.py) 1 import requests 2 import json 3 ...

  4. 用python画风车_python接口自动化()一)(实现一款简单的接口自动化框架)

    python接口自动化一(设计一款自己的接口自动化框架) 一.起因: 前面学习过了python接口requests来进行接口测试,但是在框架选择上还是选择的unittest.当接口数量不怎么多时还好, ...

  5. python选择题题目_Python接口测试题(持续更新中)

    1.json和字典的区别? Json是轻量级的数据交互格式,以key-value的键值对形式来保存数据,结构清晰,可以说是目前互联网项目开发中最常用的一种数据交互格式. 字典,同样是以key-valu ...

  6. Python接口自动化之接口依赖

    VOL 129 28 2020-05 今天距2021年216天 这是ITester软件测试小栈第129次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  7. 全栈搭建接口自动化之接口开发(四)

    一.前言 前面我们把Jenkins环境.开发环境都搭建好了,现在是不是开始可以写代码了,of course,lets do it! 二.实战开始 看到网上的教学都喜欢拿登录.注册做demo,这次小弟就 ...

  8. python做自动化控制postman_python自动化测试入门篇-postman

    接口测试基础-postman 常用的接口有两种:webservice接口和http api接口. Webservice接口是走soap协议通过http传输,请求报文和返回报文都是xml格式. http ...

  9. python 接口自动化测试_python接口自动化测试之接口数据依赖

    作者:泰斯特test 链接:https://juejin.im/post/5cc11f6be51d45401f566d14 在做自动化测试时,经常会对一整套业务流程进行一组接口上的测试,这时候接口之间 ...

最新文章

  1. 工业相机参数之帧率相关知识详解
  2. pb怎么连接dll_跑步学不会这项技术,谈何PB?
  3. 3.分布式文件系统HDFS之二
  4. 如果要和外国人做项目,加入一个teams是第一步,就跟我们的企业微信,钉钉差不多
  5. 迪普交换机清空配置_交换机环路详解
  6. 【转】Win32 Slider Control的用法
  7. 6款帮助 滚动视差jquery插件
  8. Qt|OpenGL对obj文件的认识以及如何去解析(opengl+qt构造地球模型)
  9. java script 环境搭建_TypeScript环境搭建
  10. 深度学习实例——Keras实现手写数字识别
  11. java visualvm 内存泄露_如何使用VisualVM检测Java内存泄漏
  12. verilog教程——initial语句和always语句
  13. 用计算机画图截图图片,如何快速截图保存图片
  14. html+css静态页面Demo(参考一唯科技官网)
  15. 钉钉直播回放视频的下载方法( fd抓包配合m3u8 )
  16. Springboot—JpaRepository—【duplicate entry for key 】
  17. 智慧校园物联网管理平台建设方案2.0
  18. 哈希值 是什么?哈希值是什么东西啊?具体怎么识别?怎么用?
  19. 根据点度分布情况,拟合线性公式
  20. Python爬虫实战:css加密 动态字体练习 猿人学比赛题目七题详解

热门文章

  1. Linux下Jenkins与GitHub自动构建NetCore与部署
  2. asp.net core添加全局异常处理及log4net、Nlog应用
  3. AspNetCore中使用Ocelot之 IdentityServer4
  4. 微软中国Azure开源开发者(深圳)研讨会
  5. 微软加入Linux基金会共建开源生态,并对谷歌加入.NET社区的举措表示欢迎
  6. 微软借Bletchley项目将云计算信息加入区块链
  7. 使用VS Code 开发.NET Core 应用程序 部署到Linux 跨平台
  8. 计算机专业学教育技术优势,西南交通大学教育技术学(040110)专业介绍
  9. php 随机指定位数,php生成一个可选位数的随机码
  10. 计算机应用技术 平面设计,全国信息化计算机应用技术水平教育考试试卷 平面设计师...