【PyRestTest】PyRestTest入门引导

pyresttest环境安装完毕之后,进行如下操作,快速入门pyresttest。

第一步:创建一个简单的REST服务

1、进行如下命令clonepyresttest项目:

git clone https://github.com/svanoort/pyresttest.git

2、安装运行Rest服务的依赖包 (Django and Django Tastypie):

sudo pip install 'django >=1.6, <1.7' django-tastypie==0.12.1

3、打开一个终端执行如下命令启动一个rest服务:

cd pyresttest/pyresttest/testapp
python manage.py testserver test_data.json

如果启动出现如下错误:

Traceback (most recent call last):File "/usr/bin/django-admin.py", line 2, in <module>from django.core import managementFile "/usr/lib64/python2.6/site-packages/django/core/management/__init__.py", line 68commands = {name: 'django.core' for name in find_commands(__path__[0])}

是由于版本不兼容问题导致,可以使用如下命令解决:

sudo pip uninstall -y django django-tastypie
sudo pip install 'django >=1.6, <1.7' django-tastypie==0.12.1

执行完上述命令,重新执行启动东rest服务命令,服务启动成功会提示:http://localhost:8000

重新打开一个新的终端命令控制台执行如下命令:

curl -s http://localhost:8000/api/person/2/ | python -m json.tool

如果所有都正常,可以看到类似于下面的响应信息:

{"first_name": "Leeroy", "id": 2, "last_name": "Jenkins", "login": "jenkins", "resource_uri": "/api/person/2/"
}

至此一个简单的Rest服务搭建完毕。

第二步: 编写一个简单的smoke测试

重新打开一个窗口,创建一个文件名为:test.yaml,文件内容如下:

---
- config:- testset: "Quickstart app tests"- test:- name: "Basic smoketest"- url: "/api/people/"

然后执行命令:

resttest.py http://localhost:8000 test.yaml

你可能注意到,上述文件中的API接口“/api/people/”是错误的会导致测试失败,控制台将显示unexpected 404且报告测试的名称。但在报告最后汇总信息,测试组默认是Default,我们可以通过group字段自定义自己的组。调整之后的test.yaml文件内容如下:

---
- config:- testset: "Quickstart app tests"- test:- group: "Quickstart"- name: "Basic smoketest"- url: "/api/person/"

重新执行命令:resttest.py http://localhost:8000 test.yaml,测试通过。

第三步: 使用不同的请求方法

Rest API有很多方法,如常用地的POST、GET、PUT、Delete等。

示例一:通过PUT添加用户,然后测试该用户是否添加:

文件putDemo.yaml内容如下:

---
- config:- testset: "Quickstart app tests"- test:- group: "Quickstart"- name: "Basic smoketest"- url: "/api/person/"- test:- group: "Quickstart"- name: "Create a person"- url: "/api/person/10/"- method: "PUT"- body: '{"first_name": "Gaius","id": 10,"last_name": "Baltar","login": "baltarg"}'- headers: {'Content-Type': 'application/json'}- test:- group: "Quickstart"- name: "Make sure Mr Baltar was added"- url: "/api/person/10/"

第三个测试在运行时可能会出现问题,因为只有当Balter在数据库存在时,该测试才能通过。那是不是可以在执行第三个测试之前,做一个测试判断Balter是否存在呢?调整之后的文件内容如下:

---
- config:- testset: "Quickstart app tests"- test:- group: "Quickstart"- name: "Make sure Mr Baltar ISN'T there to begin with"- url: "/api/person/10/"- expected_status: [404]- test:- group: "Quickstart"- name: "Basic smoketest"- url: "/api/person/"- test:- group: "Quickstart"- name: "Create a person"- url: "/api/person/10/"- method: "PUT"- body: '{"first_name": "Gaius","id": 10,"last_name": "Baltar","login": "baltarg"}'- headers: {'Content-Type': 'application/json'}- test:- group: "Quickstart"- name: "Make sure Mr Baltar is there after we added him"- url: "/api/person/10/"

现在第一个测试会失败:因为用户已经添加到数据库中,能正确响应,状态码为200,不符合预期结果。为了能让测试形成闭环,可以在添加用户之后,然后删除,让当前文件中的数据形成一个闭环。调整之后的文件内容如下:

---
- config:- testset: "Quickstart app tests"- test:- group: "Quickstart"- name: "Make sure Mr Baltar ISN'T there to begin with"- url: "/api/person/10/"- expected_status: [404]- test:- group: "Quickstart"- name: "Basic smoketest"- url: "/api/person/"- test:- group: "Quickstart"- name: "Create a person"- url: "/api/person/10/"- method: "PUT"- body: '{"first_name": "Gaius","id": 10,"last_name": "Baltar","login": "baltarg"}'- headers: {'Content-Type': 'application/json'}- test:- group: "Quickstart"- name: "Make sure Mr Baltar is there after we added him"- url: "/api/person/10/"- test:- group: "Quickstart"- name: "Get rid of Gaius Baltar!"- url: "/api/person/10/"- method: 'DELETE'- test:- group: "Quickstart"- name: "Make sure Mr Baltar ISN'T there after we deleted him"- url: "/api/person/10/"- expected_status: [404]

上述文件已经形成了从创建-查询-删除-查询的用户验证生命周期环。此外还支持基本的认证。

---
- config:- testset: "Quickstart authentication test"- test:- name: "Authentication using basic auth"- url: "/api/person/"- auth_username: "foobar"- auth_password: "secret"- expected_status: [200]

至此,快速入门部门撰写完毕。本部分主要目的如下:

  • 了解文件的格式,能通过简单模仿操作,培养对该工具的使用兴趣。
  • 了解文件api涉及核心,单独文件最好覆盖一个完整的业务流,形成业务闭环。
  • 涉及了预期结果的比对,expected_status,该函数是对响应状态码进行断言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/657663.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu 22.04 中文乱码解决方案

sudo apkg-reconfigure locales 按空格键选中

团队管理-如何提高员工积极性

一、审题 关键词&#xff1a;提高、工作积极性 有哪些指标&#xff1a; 1、迭代工作交付量&#xff0c;单位时间内完成的工作内容 2、问题解决&#xff0c;处理问题的态度是否积极&#xff0c;效率是否提高 3、工作主动性&#xff0c;是否主动的承担一些工作职责&#xff…

PHP面试--echo、print、print_r、var_dump区别

echo、print、print_r、var_dump 区别 echo 输出单个或多个字符&#xff0c;多个使用逗号分隔无返回值 echo "String 1", "String 2";print 只可以输出单个字符返回1&#xff0c;因此可用于表达式 print "Hello"; if ($expr && pri…

Jenkins自动化打包

Jenkins自动化打包 下载安装 我们直接从官网https://www.jenkins.io/download/ 下载所需的Jenkins文件 如上图所示, 选择Windows版本,下面就是一路安装即可,需要注意的是,选择作为系统服务选项, 不要自己设置账号密码登录. Web配置 安装完根据提示在浏览器打开 http://lo…

达梦数据库存储过程

根据网上语法自学写的存储过程&#xff0c;使用的是DBeaver工具&#xff0c;但是调试过程太痛苦&#xff0c;也不清楚为什么有时候改了报错或者没生效。 注意点&#xff1a; 1.如果怀疑没生效或者不对&#xff0c;可以建个临时表每次往里面插不同数据确认代码是否最新。 2.不…

iZotope RX 10.4.2 mac激活版 音频修复和增强工具

iZotope RX 10 for Mac是一款专业的音频修复软件&#xff0c;旨在提供强大、精确的工具&#xff0c;让用户能够清晰、纯净地处理音频。以下是其主要功能和特点&#xff1a; 软件下载&#xff1a;iZotope RX 10.4.2 mac激活版下载 强大的降噪功能&#xff1a;iZotope RX 10采用了…

动态住宅IP可以用来注册亚马逊电商吗?

注册亚马逊店铺可以用动态IP&#xff0c;只要是独立且干净的网线就没问题&#xff0c;亚马逊规则要求一个IP地址只能出现一个亚马逊店铺&#xff0c;若使用不当会导致关联账户。所以现在非常多人使用指纹浏览器搭配代理IP 固定ip可以给我们的账户带来更多的安全&#xff0c;要知…

输电线路导线舞动在线监测装置:“舞动”不再!守护电网安全!

输电线路导线舞动会影响输电线路的运行安全&#xff0c;其影响因素主要包括以下几个方面&#xff1a; 1、风力影响&#xff1a;风力是导致输电线路导线舞动的主要原因之一。在风的激励下&#xff0c;会对导线施加较大的侧向压力&#xff0c;导线会随风摆动&#xff0c;发生扭转…

docker程序镜像的安装

目录 一、流程 二、总结 一、 流程 对文中脚本测试前提默认系统已安装docker docker程序部署命令脚本 加载已打包的docker程序 docker load < sto...p.tar创建网络 名称为c…m子网subnet 172.27.16.1/24网关gateway 172.27.16.254-d 指定网络驱动程序 docker network cre…

iOS17使用safari调试wkwebview

isInspectable配置 之前开发wkwebview的页面的时候一直使用safari调试&#xff0c;毕竟jssdk交互还是要用这个比较方便&#xff0c;虽说用一个脚本插件没问题。不过还是不太方便。 但是这个功能突然到了iOS17之后发现不能用了&#xff0c;还以为又是苹果搞得bug&#xff0c;每…

Skywalking trace UI页面中字段信息详解,包括端点、跨度类型和Peer

刚上手Skywalking的同学可能对 trace UI 页面信息中的字段信息不是很了解&#xff0c;在这里就给大家一一讲解&#xff0c;重点关注端点、跨度类型和Peer 服务 :服务的名称 实例&#xff1a;服务对应的实例 端点&#xff1a;端点(Endpoint) 对于特定服务所接收的请求路径, 如…

Word莫名其妙开启兼容模式将其永久取消的方法

这是因为Word模板文件被意外更改了 找到Word模板文件&#xff0c;目录在C:\Users\15976\AppData\Roaming\Microsoft\Templates 15976替换成你自己的用户名&#xff0c;不确定的就先点进C/Users看一看&#xff0c; AppData是隐藏文件夹&#xff0c;显示隐藏文件夹才能看见&am…

点餐APP开发需要用到的一些源代码

在数字化日益普及的今天&#xff0c;点餐APP已经成为人们日常生活的重要组成部分&#xff0c;从校园食堂到高级餐厅&#xff0c;从快餐外卖到定制化营养餐&#xff0c;点餐APP的多样性和便利性满足了不同用户的需求&#xff0c;本文将深入探讨在开发一款点餐APP时可能用到的源代…

Vim实战:使用 Vim实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…

函数参数那些事 - JS

形参&#xff1f;实参&#xff1f; 形参&#xff1a;形式参数&#xff0c;函数声明时使用的参数&#xff0c;在调用时用于接收实参值的变量&#xff1b;实参&#xff1a;实际参数&#xff0c;函数调用时&#xff0c;以值传递的方式发送给形参&#xff0c;可以是任何数据。 注…

企业级大模型的护城河:RAG + 微调

围绕LLM的炒作是前所未有的&#xff0c;但这是有道理的&#xff0c;生成式 AI 有潜力改变我们所知道的社会。 在很多方面&#xff0c;LLM将使数据工程师变得更有价值——这令人兴奋&#xff01; 不过&#xff0c;向老板展示数据发现工具或文本到 SQL 生成器的炫酷演示是一回事…

CTF-WEB的知识体系

CTF概念 CTF是Capture The Flag的缩写&#xff0c;中文一般译作夺旗赛 CTF起源于1996年DEFCON全球黑客大会 DEFCONCTF是全球技术水平和影响力最高的CTF竞赛 竞赛模式 解题模式:解决网络安全技术挑战(即找到flag)&#xff0c;提交后获取相应分值。 攻防赛模式:要求找到其他队…

故障诊断 | 一文解决,CNN卷积神经网络故障诊断(Matlab)

文章目录 效果一览文章概述专栏介绍源码设计参考资料效果一览 文章概述 故障诊断 | 一文解决,CNN卷积神经网络故障诊断(Matlab) 专栏介绍 订阅【故障诊断】专栏,不定期更新机器学习和深度学习在故障诊断中的应用;订阅

TWS耳机产品有哪些芯片?这就告诉你

随着时代发展&#xff0c;越来越多消费者开始追捧TWS耳机&#xff0c;相比其他耳机&#xff0c;TWS耳机轻便易带&#xff0c;小巧精密。为了满足TWS耳机这些特点&#xff0c;需要配备多种核心芯片&#xff0c;那么你知道有哪些芯片吗&#xff1f; 1、主控芯片主控芯片是TWS耳机…

[GN] 23种设计模式 —— 常见设计模式学习总结

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言创建型模式 —— 创建的艺术结构型模式 —— 组合的艺术适配器模式 -- 不兼容结构的协调对象适配器类适配器模式优缺点适用场景 组合模式 -- 树形结构的处理例子…