unittest---unittest封装方法
前面我们写了一个关于查询歌曲的接口测试,但是代码重复性比较大,进行一次简单的优化
封装方法
在编写自动化脚本的时候,都要求代码简介,上一篇unittest---unittest断言中代码重复性比较多,我们进行一次简单的优化(优化方法不同,请勿喷)
我们可以看到下面的代码每个用例中都填写了不同的参数和请求相同的接口地址,我们可以通过把相同的代码进行提取出来,然后调用这个方法,完成简化代码
# coding:utf-8
import unittest
import requests
class Music(unittest.TestCase):
def test01(self): url = 'https://api.apiopen.top/searchMusic'
data = {
"name":"断桥残雪"
}
r = requests.post(url,data=data)
b = r.json()['result'][0]['title']
a = '断桥残雪'
self.assertEqual(a,b)
print('第一个用例通过') def test02(self): url = 'https://api.apiopen.top/searchMusic'
data = {
"name":"说好不哭"
}
r = requests.post(url,data=data)
a = '周杰伦'
b = r.text
self.assertIn(a,b)
print('第二个用例通过') def test03(self): url = 'https://api.apiopen.top/searchMusic'
data = {
"name":"芒种"
}
r = requests.post(url,data=data)
a = '抖音'
b = r.text
try:
self.assertIn(a,b,msg='\n抖音不存在芒种歌曲信息中')
except Exception as msg:
print('错误信息%s'%msg)
print('第三个用例失败')
if __name__ == '__main__':
unittest.main()
1、相同的代码提取出来,单独封装成一个函数
# 相同的代码提取出来,返回歌名,方便断言
def select(self,name):
url = 'https://api.apiopen.top/searchMusic'
data = {
"name":name
}
r = requests.post(url,data=data)
b = r.json()['result'][0]['title']
return b
2、通过unittest的编写用例格式,进行编写用例,调用上面的函数
def test01(self):
b = '断桥残雪'
a = self.select(b)
self.assertEqual(b,a) def test02(self):
a = '说好不哭'
b = self.select(a)
self.assertEqual(a,b) def test03(self):
a = '芒种'
c = '抖音'
b = self.select(a)
try:
self.assertIn(c,b,msg='\n抖音不存在芒种歌曲信息中')
except Exception as msg:
print('错误信息%s'%msg)
3、完整代码
# coding:utf-8
import unittest
import requests class Music(unittest.TestCase): def select(self,name):
url = 'https://api.apiopen.top/searchMusic'
data = {
"name":name
}
r = requests.post(url,data=data)
b = r.json()['result'][0]['title']
return b def test01(self):
b = '断桥残雪'
a = self.select(b)
self.assertEqual(b,a) def test02(self):
a = '说好不哭'
b = self.select(a)
self.assertEqual(a,b) def test03(self):
a = '芒种'
c = '抖音'
b = self.select(a)
try:
self.assertIn(c,b,msg='\n抖音不存在芒种歌曲信息中')
except Exception as msg:
print('错误信息%s'%msg)
if __name__ == '__main__':
unittest.main()
通过上面的接口我们只是简单的了解下如何可以把自己的代码写的更加好看,更加的简介。(让别人看到代码就会更加的崇拜你~~~~)
我们在通过一个小例子来练习。通过请求豆瓣网的登录接口
1、豆瓣网登录接口封装完成
封装请求的url,进行对参数化,返回断言数据
def login(self,name,password):
# 登录请求地址
url = 'https://accounts.douban.com/j/mobile/login/basic'
# 请求头
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"
}
# body数据
data = {
'name':name, # 账号
"password":password, # 密码
"remember":"false"
}
r = requests.post(url,headers=headers,data=data)
b = r.text
return b
2、不同的账号密码进行请求
3、通过断言判断用例是否成功

完整代码
# coding:utf-8
import requests
import unittest
class Test_login(unittest.TestCase): def login(self,name,password):
# 登录请求地址
url = 'https://accounts.douban.com/j/mobile/login/basic'
# 请求头
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"
}
# body数据
data = {
'name':name, # 账号
"password":password, # 密码
"remember":"false"
}
r = requests.post(url,headers=headers,data=data)
b = r.text
return b def test01(self):
# 正确的账号,密码
b = self.login('xxxxxxx','xxxxxxx')
a = '处理成功'
self.assertIn(a,b)
print('用例通过') def test02(self):
# 错误的账号,密码
b = self.login('','')
a = '用户名或密码错误'
self.assertIn(a,b)
print('用例通过') if __name__ == '__main__':
unittest.main()
安静简单的优化了一些代码,可能优化的不是很好,大佬们勿喷~~~
unittest---unittest封装方法的更多相关文章
- Python+Selenium框架-unittest执行脚本方法之addTest
本文开始介绍如何通过unittest来管理和执行测试用例,这一篇介绍unittest下addTest()方法来加载测试用例到测试套件中去.为了演示效果,我在前面文章的脚本基础上,新建了一个测试脚本,这 ...
- unittest中的方法调用时报错ValueError: no such test method in <class 'mytestcase.MyTestCase'>: runTest
调用unittest中的方法时报错: ValueError: no such test method in <class 'mytestcase.MyTestCase'>: runTest ...
- unittest 中的方法调用时报错 ValueError: no such test method in <class 'mytestcase.MyTestCase'>: runTest
1.调用unittest中的方法时报错: ValueError: no such test method in <class 'mytestcase.MyTestCase'>: runTe ...
- js面向对象的封装方法,【案例】
封装方法: /** * @矩形canvas库 * @authors Shimily (275766400@qq.com) * @date 2016-12-28 10:30:51 * @version ...
- Javascript 封装方法
基本封装方法 请看下面的例子: var Person = function(name,age){ this.name = name; this.age = age || "未填写" ...
- [论文笔记] 一种Java遗留系统服务化切分和封装方法 (计算机学报, 2009)
李翔,怀进鹏,曾晋,高鹏. 一种Java遗留系统服务化切分和封装方法. 计算机学报, 32(9), 2009, p1084-1815 (gs:5) 1. 本文研究从Java遗留系统中切分并封装出Web ...
- 分享几个Javascript 封装方法
基本封装方法 请看下面的例子: var Person = function(name,age){ this.name = name; this.age = age || "未填写" ...
- iOS常用的封装方法
做开发也有一段时间了,看了好多大神的代码,总体感觉他们写的代码简洁,好看,然而在对比下我写的代码,混乱,无序,简直不堪入目啊! 总体来说大神们的代码封装的都比较好,对一个项目要重复用到的代码他们都会封 ...
- JavaScrpt常用的封装方法
1.闭包封装.在这个封装方法中,所有的实例成员都共享属性和方法, 使得所有得方法和属性都私有且对象间共享 (function ($) { var Person = function(name) { r ...
随机推荐
- Spring(Bean)3
bean的继承<!-- bean 的继承 作为模板来使用. 可以通过abstract="true"来指定把该bean配置为·抽象的. 通过abstract="tru ...
- MySQL5.7.18自动化安装脚本
背景 很好的朋友邱启明同学,擅长MySQL,目前任职某大型互联网业MySQL DBA,要来一套MySQL自动安装的Shell脚本,贴出来保存一些. 此版本为 MySQL 5.7.18 ###### 自 ...
- 本科阶段就挑战自动驾驶开发?华为云ModelArts帮你轻松实现!
欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...
- 一条数据的HBase之旅,简明HBase入门教程1:开篇
[摘要] 这是HBase入门系列的第1篇文章,主要介绍HBase当前的项目活跃度以及搜索引擎热度信息,以及一些概况信息,内容基于HBase 2.0 beta2版本.本系列文章既适用于HBase新手,也 ...
- 5分钟教你看大神操作keepalived服务
第11章 高可用服务(keepalived)的配置 11.1 高可用服务的概念 11.1.1 高可用服务总体概念 为了解决单点故障 减轻服务器的压力 11.1.2 高可用keepalived的概念 为 ...
- kerberos&ssh 原理、免密登录搭建
原理 详细介绍 参考oracle文档:Kerberos 服务 安装过程 1.安装krb5 yum install -y krb5-server yum install krb5-workstation ...
- 【Web技术】337- 秒懂 Web 缓存
点击上方"前端自习课"关注,学习起来~ 最近把前端缓存重新整理了一下,从整体的层面上把前端所有能用的缓存方案梳理了一遍.同时,对于http缓存,使用了表格的方案,使得原先晦涩难记的 ...
- dockerfile-格式和使用
一.dockerfile格式 Dockerfile是一个包含用于组合映像的命令文本文档,可以使用在命令行中调用任何命令,Docker通过读取dockerfile中的指令自动生成映像.docker bu ...
- 16个Spring注解,你知道的有几个?
@Controller 标识一个该类是Spring MVC controller处理器,用来创建处理http请求的对象. @RestController Spring4之后加入的注解,原来在@Co ...
- 【Java笔试】对数据库中的分解是否为无损连接和是否保持函数依赖的判定-由牛客网试题引申-保姆式教学
[牛客网数据库原理题目]设关系模式R(A,B,C),F是R上成立的FD集,F={A→B,C→B},ρ={AB,AC}是R的一个分解,那么分解ρ()? 正确答案:C你的答案:A(错误) ( A ) 保持 ...