网站建设常用的方法,wordpress 企业站开发,如何制作产品网站模板下载地址,门户网站建站要求1 接口测试
日常测试中接口测试是一项重要的工作#xff0c;尤其是http协议的接口测试更加普遍,比如一些常用的测试框架或者工具#xff08;robotframework框架#xff0c;testng框架#xff0c;postman等#xff09;都支持http接口的测试#xff0c;而这节内容主要介绍…
1 接口测试
日常测试中接口测试是一项重要的工作尤其是http协议的接口测试更加普遍,比如一些常用的测试框架或者工具robotframework框架testng框架postman等都支持http接口的测试而这节内容主要介绍下http接口在pytest框架下的应用。 测试分层
2 复习下Http协议规范
Http协议是基于TCP协议三次握手的7层协议不了解的可以搜索下网络协议模型所以在开始使用工具之前我们通过浏览器的开发者工具看下http请求的基本消息格式。
我们以输入百度网站为例通过打开开发者工具看下访问百度的http请求。 通过上面几张图可以看到 http请求的URL为https://www.baidu.com, 请求的method为Get请求响应的status为200还包括发送请求的消息头headers信息和响应返回的消息头Headers信息。
做接口测试我们关注的肯定也是上述http请求的内容通过传入的参数断言返回的消息响应码/消息体是否满足我们的预期。
3 安装所需的python包
在pytest框架下我们主要介绍两个包requests作为http客户端和pytest插件pytest-httpserver作为http的服务端。
pytest安装
使用pip命令安装: pip install pytest -i https://mirrors.aliyun.com/pypi/simple/
pytest-httpserver安装
使用pip命令安装: pip install pytest-httpserver -i https://mirrors.aliyun.com/pypi/simple/
requests安装
使用pip命令安装: pip3.10 install requests -i https://mirrors.aliyun.com/pypi/simple/
PS:安装在pytest工程所运行的python环境python的安装目录或者虚拟环境目录可以参考之前文章查看运行环境pycharm配置pytest运行环境)
4 pytest-httpserver插件介绍
官网使用介绍 请参考pytest-httpserver — pytest_httpserver 1.0.12 documentation
pytest-httpserver插件安装后默认会有一些fixture函数直接使用fixture函数请参考之前问文章Pytest框架中fixture功能详解。
在pytest_plugin.py中有fixture函数httpserver该函数会初始化一个HTTPserver,当然我们也可以直接使用HTTPServer。 启动httpserver需要监听的ip和port 首先会取os模块配置的环境变量如下
listen_host os.environ.get(PYTEST_HTTPSERVER_HOST)
listen_port os.environ.get(PYTEST_HTTPSERVER_PORT)
如果环境变量获取为None则取HTTPserver类的类属性作为默认值
DEFAULT_LISTEN_HOST localhost
DEFAULT_LISTEN_PORT 0 # Use ephemeral port
以下是源代码 如果不想使用默认的ip和端口我们可以重新设置环境变量的ip地址和端口
import os
import pytest
#设置环境变量
os.environ[PYTEST_HTTPSERVER_HOST] 127.0.0.1
os.environ[PYTEST_HTTPSERVER_PORT] 8080
#获取环境变量值
listen_host os.environ.get(PYTEST_HTTPSERVER_HOST)
listen_port os.environ.get(PYTEST_HTTPSERVER_PORT)
#打印
print(listen_host,listen_port)
打印结果
127.0.0.1 8080
用上面的ip和端口我们启动一个httpserver
from pytest_httpserver import *
#初始化类
http_server HTTPServer(listen_host,listen_port)
#设置url 和 method
http_server.expect_request(
/index.html, methodget).respond_with_json({code: 200})
#启动
http_server.start()
httpserver启动后我们可以登陆浏览器访问如下 以上函数解释
expect_request 方法用于创建HTTP请求地址设置http的uri地址或者http的methodGETPOST等或者http的请求参数问号后面的参数或者http请求响应中返回的json体等 respond_with_json方法设置http请求响应的json体可定义响应码200等。start方法启动httpserver。对应的stop方法是关闭httpserver
5 requests库介绍
requests库是一个简单易用的HTTP库使用前先导入requests包。
import requests
以下是一些常用函数介绍
get方法
requests.get(http://127.0.0.1:8080/index.htmlheaders{user-agent: my-app/0.0.1})
其中headers为添加的请求头信息。
post方法
requests.post(http://127.0.0.1:8080/index.html, data {key:value})
其中data为请求body体。
处理响应
不管是get还是post方法我们都可以访问响应对象的属性来获取所需的响应信息比如
response.text获取响应内容的字符串形式。
response.content获取响应内容的二进制形式。
response.status_code获取HTTP响应状态码。
response.headers获取响应头。
response.json()如果响应内容是JSON格式可以直接调用这个方法来获取JSON数据。
6 http接口用例
在pytest框架下我们创建测试用例并校验响应的statuscode和内容。
创建两条用例分别请求httpserver的get和post。
import requests
#使用fixture函数httpserver
def test_1(httpserver):#通过httpserver这个fixture函数启动一个serverhttpserver.expect_request(/service, methodpost, json{ title: hello pytest}).respond_with_json({code: 200})#通过requests库发起http请求rsp requests.post(http://127.0.0.1:8080/service, json{ title: hello pytest})assert rsp.status_code 200assert rsp.json() {code: 200}def test_2(httpserver):httpserver.expect_request(/index.html, methodget).respond_with_json({code: 200})rsp requests.get(httpserver.url_for(/index.html))assert rsp.status_code 200assert rsp.json() {code: 200}
以上我们简要介绍了使用python库requests和pytest插件pytest-httpserver在pytest框架下的http接口用例大家可以在线下多多实践当然对于大型的项目我们还要规划好整个测试用例目录结构。
共勉 东汉·班固《汉书·枚乘传》“泰山之管穿石单极之绠断干。水非石之钻索非木之锯渐靡使之然也。”
-----指水滴不断地滴可以滴穿石头
-----比喻坚持不懈集细微的力量也能成就难能的功劳。
----感谢读者的阅读和学习和关注谢谢大家。