前面我们写了一个关于查询歌曲的接口测试,但是代码重复性比较大,进行一次简单的优化

封装方法

在编写自动化脚本的时候,都要求代码简介,上一篇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封装方法的更多相关文章

  1. Python+Selenium框架-unittest执行脚本方法之addTest

    本文开始介绍如何通过unittest来管理和执行测试用例,这一篇介绍unittest下addTest()方法来加载测试用例到测试套件中去.为了演示效果,我在前面文章的脚本基础上,新建了一个测试脚本,这 ...

  2. unittest中的方法调用时报错ValueError: no such test method in <class 'mytestcase.MyTestCase'>: runTest

    调用unittest中的方法时报错: ValueError: no such test method in <class 'mytestcase.MyTestCase'>: runTest ...

  3. unittest 中的方法调用时报错 ValueError: no such test method in <class 'mytestcase.MyTestCase'>: runTest

    1.调用unittest中的方法时报错: ValueError: no such test method in <class 'mytestcase.MyTestCase'>: runTe ...

  4. js面向对象的封装方法,【案例】

    封装方法: /** * @矩形canvas库 * @authors Shimily (275766400@qq.com) * @date 2016-12-28 10:30:51 * @version ...

  5. Javascript 封装方法

    基本封装方法 请看下面的例子: var Person = function(name,age){ this.name = name; this.age = age || "未填写" ...

  6. [论文笔记] 一种Java遗留系统服务化切分和封装方法 (计算机学报, 2009)

    李翔,怀进鹏,曾晋,高鹏. 一种Java遗留系统服务化切分和封装方法. 计算机学报, 32(9), 2009, p1084-1815 (gs:5) 1. 本文研究从Java遗留系统中切分并封装出Web ...

  7. 分享几个Javascript 封装方法

    基本封装方法 请看下面的例子: var Person = function(name,age){ this.name = name; this.age = age || "未填写" ...

  8. iOS常用的封装方法

    做开发也有一段时间了,看了好多大神的代码,总体感觉他们写的代码简洁,好看,然而在对比下我写的代码,混乱,无序,简直不堪入目啊! 总体来说大神们的代码封装的都比较好,对一个项目要重复用到的代码他们都会封 ...

  9. JavaScrpt常用的封装方法

    1.闭包封装.在这个封装方法中,所有的实例成员都共享属性和方法, 使得所有得方法和属性都私有且对象间共享 (function ($) { var Person = function(name) { r ...

随机推荐

  1. vue 中使用 watch 的各种问题

    报错: Method "watch" has type "object" in the component definition. Did you refere ...

  2. java学习引言

    Java学习之路:不走弯路,就是捷径 0.引言 软件开发之路是充满荆棘与挑战之路,也是充满希望之路.Java学习也是如此,没有捷径可走.梦想像<天龙八部>中虚竹一样被无崖子醍醐灌顶而轻松获 ...

  3. Django总结目录

    Django总结目录 1. django框架简介及自定义简易版框架 2. 路由层 3. 视图层 4. 模板层 5. 模型层 5.1 基本操作 5.2 多表操作 5.3 进阶相关 6. 组件 6.1 a ...

  4. Nginx动静分离(Nginx+Tomcat)

    第一步:nginx构建 第二步:Tomcat构建 1.Tomcat基础点 (1)Tomcat 是基于java开发的web容器,用来发布java代码和jsp网页. (2)开发人员开发java web网站 ...

  5. javascript实用Date工具

    时间字符串和年月日数据之间的自由转换工具:2018年更新版 上代码: /** * @Desc: 时间处理工具 * @Author: 拿饭盒当烟灰缸 * @Date: 2018-02-27 15:42: ...

  6. js4——字符转化

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. 八分音符(频率)卷积算子 Octave Convolution

    为什么读此系列文章? 优化数学和计算理论帮助机器学习完成问题分类: 1)按照领域划分,比如计算机视觉,自然语言处理,统计分析预测形: 2)按照算法复杂划分,比如是否是NP-Hard问题,是否需要精确解 ...

  8. es6 proxy浅析

    Proxy 使用proxy,你可以把老虎伪装成猫的外表,这有几个例子,希望能让你感受到proxy的威力. proxy 用来定义自定义的基本操作行为,比如查找.赋值.枚举性.函数调用等. proxy接受 ...

  9. JS获得天数差异

    //获得天数差异 function datedifference(sDate1, sDate2) { //sDate1和sDate2是2006-12-18格式 var dateSpan, tempDa ...

  10. luogu P1908 逆序对 |树状数组

    题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计.最近,TOM老猫查阅到一个人类称之为"逆序对"的 ...