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

封装方法

在编写自动化脚本的时候,都要求代码简介,上一篇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. .net反编译原理

    目录 目录 前言 ILdasm ILasm 结语 推荐文献 目录 NLog日志框架使用探究-1 NLog日志框架使用探究-2 科学使用Log4View2 前言 本来没有想写反编译相关的文章,但是写着写 ...

  2. 【Android - 控件】之MD - Snackbar的使用

    Snackbar 是 Android 5.0 新特性——Material Design 中的一个控件,用来代替 Toast ,Snackbar与Toast的主要区别是:Snackbar可以滑动退出,也 ...

  3. eclipse导出jar(java打包导出jar)

    有时候需要将j2se工程导出,这样可以在别处运作,就不必拘泥于开发感觉中才能运行了.具体做法如下:方法一:(工程没有引用外部jar包时,直接导出) 选中工程---->右键,Export...-- ...

  4. 压缩打包介绍、gzip、bzip2、xz压缩工具

    第5周第1次课(4月16日) 课程内容: 6.1 压缩打包介绍6.2 gzip压缩工具6.3 bzip2压缩工具6.4 xz压缩工具 6.1 压缩打包介绍 为什么要给文件进行压缩呢?首先压缩和不压缩空 ...

  5. xcode8 运行项目时自己打印些东西

    使用 Xcode 8 运行工程的时候,在打印台会发现如下这些奇怪的日志输出: 2016-09-19 10:43:44.001757 Demo[7100:171568] subsystem: com.a ...

  6. 如何解决jpa 要求column 名称单词必须用下划线

    [转]:http://www.jeesns.cn/article/detail/6657 先引出轮子http://blog.csdn.net/54powerman/article/details/76 ...

  7. mongoDB学习笔记(一)之操作符

    本文主要讲解mongoDb的一些常用的操作符的用法.随着作者本身的能力的提高,本文也会不断的完善. 官方文档链接为有: https://docs.mongodb.com/manual/referenc ...

  8. Thinkphp5.1 导入第三方包的问题

    一般刚接触tp5.1的,会很不适应,虽然版本号只是比5.0多了0.1,但是差别挺大,废弃了不少方法,官方的教程又很简单,很多东西没说全,在此鄙视一下框架作者,最起码体谅一下小白嘛,搞了好多天才把5.1 ...

  9. 【开发者portal在线开发插件系列四】数组 及 可变长度数组

    基础篇 基础场景见上面两个帖子,这里单独说明数组和可变长度数组的用法. 话不多说,开始今天的演(表)示(演) Profile和插件开发 添加一个string类型的属性: 在插件里添加一条数据上报消息: ...

  10. base64转图片、图片转base64、图片拼接、加水印(水印角度可设置)

    /** * @Description: 将base64编码字符串转换为图片 * @param imgStr * base64编码字符串 * @param path * 图片路径-具体到文件 * @re ...