今年肯定是要把Python学到一定程度的,否则感觉自己混不下去了,那就开始半挣扎的咸鱼生活吧。
------------------------------------------------------------------------------------------------------------------------------------
接口测试嘛,一般先把这个接口调通,然后进行一些测试用例的设计(可以用等价类、边界值等方法),之后执行测试用例查看response是否符合接口文档中的预期。按照这个逻辑,开始:
1、先调通,用到requests库,那就先import(需要先在设置中添加requests),然后发起请求。
import requests
r=requests.get('http://t.weather.sojson.com/api/weather/city/101250101')
response_data=r.json()
print(response_data)
还可以把一些信息打印出来,可以用作断言
#获取日期,响应信息,状态,城市
print(response_data['date'])
print(response_data['message'])
print(response_data['status'])
print(response_data['cityInfo']['city'])
#获取当日天气具体信息
print(response_data['data']['forecast'][0]['ymd'])
print(response_data['data']['forecast'][0]['type'])
print(response_data['data']['forecast'][0]['high'])
print(response_data['data']['forecast'][0]['low'])
2、接口这样就算是调通了,就开始设计测试用例(这里示例正常的、空参、参数值错误三种情况),然后符合预期(预期就用断言去判断了),这里用python的单元测试框架unittest来集成,关于这个框架的介绍,可以百度很多资料,也可以直接按照Ctrl,然后点击“unittest”查看它的源码说明。理清逻辑,那就开始:
import requests
import unittest
from time import sleep
class WeatherTest(unittest.TestCase):
def setUp(self):
pass
#正常查询长沙的天气,断言
def test_weather_changsha(self):
r=requests.get('http://t.weather.sojson.com/api/weather/city/101250101')
result= r.json()
#断言
self.assertEqual(result['status'],200)
self.assertEqual(result['message'],'Success !')
self.assertEqual(result['cityInfo']['city'],'长沙市')
#设置间隔时间,避免IP被封,这个接口本身有限制的
sleep(5)
# 不传city_code,断言
def test_weather_no_reference(self):
r=requests.get('http://t.weather.sojson.com/api/weather/city/')
result=r.json()
self.assertEqual(result['status'], 404)
self.assertEqual(result['message'], 'Request resource not found.')
sleep(5)
#传入一个不存在的city_code,断言
def test_weather_reference_error(self):
r=requests.get('http://t.weather.sojson.com/api/weather/city/100250101')
result = r.json()
self.assertEqual(result['status'], 403)
self.assertEqual(result['message'], 'no_city_id')
sleep(5)
if __name__ == '__main__':
unittest.main()
稍微了解一下unittest,就能把最上面调通接口的代码改成在unittest中这样了。其实我是想把city_code做成参数化,然后传进每个def中(url='http://t.weather.itboy.net/api/weather/city/'+'city_code'),无奈效果不理想,后续再看吧,运行结果如下:
3、都到这了,顺手加个报告吧,这里用BSTestRunner(HTMLTestRunner)。另创建一个Python File,代码如下:
先在这里(https://github.com/easonhan007/HTMLTestRunner)下载BSTestRunner.py,然后放到.\python\lib目录下,代码中引用就行了。
import unittest
from BSTestRunner import BSTestRunner
import time
#指定测试用例和测试报告的路径
test_dir='C:\\Users\\16520\\Desktop\\test_case'
report_dir='C:\\Users\\16520\\Desktop\\reports'
#加载测试用例
discover=unittest.defaultTestLoader.discover(test_dir,pattern='Weather_api.py')
#定义报告的文件格式
now=time.strftime("%Y-%m-%d %H-%M-%S")
report_name=report_dir+'/'+'test_report.html'
#运行测试用例生成报告
with open(report_name,'wb') as f:
runner=BSTestRunner(stream=f,title="Weather API Test Report",description="China City Weather Test Report")
runner.run(discover)
执行之后在“C:\Users\16520\Desktop\reports”这个文件夹里面就能看到一个html文件了,打开就能看到详细的东西了
PS:网上有很多二开的HTMLTestRunner,加了很多东西,也有用Allure2做测试报告,集成Jenkins的,有兴趣都可以了解一下。
集成unittest做接口测试
unittest接口测试 上篇已经讲了接口测试的做法,利用的是postman工具,工具始终是工具,它有一定的局限性,比如测试数据的存放,断言的方法以及上下接口关联使用灵活性.python对http接口 ...
简单实现接口自动化测试(基于python+unittest)
简单实现接口自动化测试(基于python+unittest) 简介 本文通过从Postman获取基本的接口测试Code简单的接口测试入手,一步步调整优化接口调用,以及增加基本的结果判断,讲解Pytho ...
Python Thrift 简单示例
本文基于Thrift-0.10,使用Python实现服务器端,使用Java实现客户端,演示了Thrift RPC调用示例.Java客户端提供两个字符串参数,Python服务器端计算这两个字符串的相似度 ...
python psutil简单示例
python psutil简单示例 利用psutil编写简单的检测小脚本 0.安装psutil模块 ...
C#调用Python脚本的简单示例
C#调用Python脚本的简单示例 分类:Python (2311) (0) 举报 收藏 IronPython是一种在 .NET及 Mono上的 Python实现,由微软的 Jim Huguni ...
Websocket - Websocket原理(握手、解密、加密)、基于Python实现简单示例
一.Websocket原理(握手.解密.加密) WebSocket协议是基于TCP的一种新的协议.WebSocket最初在HTML5规范中被引用为TCP连接,作为基于TCP的套接字API的占位符.它实 ...
python+requests+json 接口测试思路示例
实际项目中用python脚本实现接口测试的步骤: 1 发送请求,获取响应 >>2 提取响应里的数据,对数据进行必要的处理 >>3 断言响应数据是否与预期一致 以豆瓣接口为例 ...
python+unittest 搭建简易的接口测试框架
主要介绍如何使用python+unittest快速搭建一个接口测试的框架 1.安装python unittest 2.新建一个python项目ApiTest 在setUp和setDown里设置一些需 ...
Python自定义线程类简单示例
Python自定义线程类简单示例 这篇文章主要介绍了Python自定义线程类,结合简单实例形式分析Python线程的定义与调用相关操作技巧,需要的朋友可以参考下.具体如下: 一. 代码 # - ...
随机推荐
linux系统下make &; make install
make,make install都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤. make是用来编译的,在命令行输入make命令之后,系统会在当前目录下搜索Makefi ...
简单的STM32 汇编程序—闪烁LED
要移植操作系统,汇编是道不得不跨过去的坎.所以承接上篇的思路,我准备用汇编写一个简单的闪烁LED灯的程式.以此练习汇编,为操作系统做准备. 第一步,还是和上篇一样,建立一个空的文件夹. 第二步,因为是 ...
学习视频更新管理,对于前面数据库视频资料,以及.net资料失效感到抱歉
首先,对不起,各位网友,我知道也都是好学的的人才会来查找视频,抱歉视频失效了.以后有需要的可以常联系我,有错误定当及时改正.如有延误多多包含. 上一次发的.net学习视频失效了,我决定帮大家多找一些学 ...
css中margin-top/margin-bottom失效
要设置这两个值,我的理解应该在这个div的父容器中设置了固定宽高,或者设置了绝对定位,比如position:absolute(绝对定位) 或者压根不用,直接用padding-top/padding-b ...
Pandas中DateFrame修改列名
Pandas中DateFrame修改列名 在做数据挖掘的时候,想改一个DataFrame的column名称,所以就查了一下,总结如下: 数据如下: >>>import pandas ...
wordpress页面前端添加编辑按钮
<?php edit_post_link(__('Edit This')); ?> 在single.php或者page.php模板页面加入以上代码片段.当管理员登录后,可以直接点击编辑文章 ...
SQL-字符串合并
create table tb(id int, value varchar(10)) insert into tb values(1, 'aa') insert into tb values(1, ...
Android中的启动模式(下)
在这篇文章中,我会继续跟大家分享有关于Android中启动模式的相关知识.当然,如果对这个启动模式还不完全了解或者没有听过的话,可以先看看我之前写的有关于这个知识点的入门篇Android的启动模式(上 ...
UIImage加载图片的两种方法区别
Apple官方的文档为生成一个UIImage对象提供了两种方法加载图片: 1. imageNamed,其参数为图片的名字: 2. imageWithContentsOfFile,其参数也是图片文件的路 ...
CListCtrl使用方法汇总
回顾: 刚刚写完,因为是分期写的,所以最初想好好做一下的文章格式半途而废了~说的也许会有点啰嗦,但是所有的基础用到的技术细节应该都用到了. 如果还有什么疑问,请回复留言,我会尽力解答. 如果有错误,请 ...