python unittest接口测试脚本,Python Unittest进行接口测试的简单示例

今年肯定是要把Python学到一定程度的,否则感觉自己混不下去了,那就开始半挣扎的咸鱼生活吧。

------------------------------------------------------------------------------------------------------------------------------------

a6c69df1aae230a45ff17f0c17bbb6b8.png

接口测试嘛,一般先把这个接口调通,然后进行一些测试用例的设计(可以用等价类、边界值等方法),之后执行测试用例查看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'])

a617666bd190a5bb1918771520689df9.png

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'),无奈效果不理想,后续再看吧,运行结果如下:

e702fa23ee0ea4f8d09cd9cea0bb5bf7.png

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的,有兴趣都可以了解一下。

655459ba3f1ff6c7a9ed19842ee65c32.png

3a4320b7a7b4f3be53b17e8889751d33.png

集成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使用方法汇总

回顾: 刚刚写完,因为是分期写的,所以最初想好好做一下的文章格式半途而废了~说的也许会有点啰嗦,但是所有的基础用到的技术细节应该都用到了. 如果还有什么疑问,请回复留言,我会尽力解答. 如果有错误,请 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值