在第一目里写了几个简单demo,并把调用get和post请求的方法封装到了一个类里,这次结合python自带的unittest框架,用之前封装的方法来写一个接口测试demo

1.unittest简单用法

# -*-coding:UTF:8-*-

import unittest

class TestMethod(unittest.TestCase):  # 定义一个类,继承自unittest.TestCase
# 每次执行用例前执行setUp(),可以在这里做一些初始化的工作
def setUp(self):
print('setUp') # 每次执行用例后执行tearDown
def tearDown(self):
print('tearDown') def test001(self): # unittest中的用例必须以test开头
print('test001') def test002(self):
print('test002') if __name__ == '__main__':
unittest.main() 运行结果如下:

如果不想在每次执行用例时都执行一遍setUp()和tearDown(),只要执行一次就好,可以使用类方法代替:

# -*-coding:UTF:8-*-

import unittest

class TestMethod(unittest.TestCase):  # 定义一个类,继承自unittest.TestCase
# 每次执行用例前执行setUp(),可以在这里做一些初始化的工作
@classmethod
def setUpClass(cls):
print('setUp\n') # 每次执行用例后执行tearDown
@classmethod
def tearDownClass(cls):
print('tearDown') def test001(self): # unittest中的用例必须以test开头
print('test001') def test002(self):
print('test002') if __name__ == '__main__':
unittest.main()
运行结果如下:

2.接口测试实例

# -*-coding:UTF:8-*-

import unittest
from interface.demo import RunMain # 从之前封装的文件中,引入RunMain类
import HTMLTestRunner
import json class TestMethod(unittest.TestCase): # 定义一个类,继承自unittest.TestCase def setUp(self):
self.run = RunMain() # 在初始化方法中实例化get/post基类,生成一个实例对象,这样就不需要在每个用例中再进行实例化了 def test01(self):
url = 'http://localhost:7001/XXX'
data = {
'controlSeq': ''
}
r = self.run.run_main(url, 'POST', data) # 调用RunMain类中run_main方法
print(r)
re = json.loads(r)
self.assertEqual(re['status'], '', '测试失败')
#注意我在进行断言前,先用json库的json.loads()函数对上一步中的返回结果r进行了解码,不然直接调用r['status']时会报错“json.loadsstring indices must be integers”
#原因是,在之前的例子中,为了使显示效果更加直观,对服务器的响应结果利用json.dumps()进行了json格式的编码
def test02(self):
url = 'http://localhost:7001/XXX'
data = {
"controlSeq": ""
}
r = self.run.run_main(url, 'GET', data)
print(r)
re = json.loads(r)
self.assertEqual(re["status"], '', '测试失败') # @unittest.skip('test03') # 使用skip()方法表示跳过用例test03
def test03(self):
url = 'http://localhost:7001/XXX'
data = {
'controlSeq': '',
'seq': '',
'type': ''
}
r = self.run.run_main(url, 'POST', data)
print(r)
# print(type(r)) # 查看返回对象r的类型
re = json.loads(r)
# print(type(re))
self.assertEqual(re['status'], '', '测试失败') if __name__ == "__main__":
unittest.main() #表示执行全部用例

3.使用TestSuite()来自定义执行case

# -*-coding:UTF:8-*-

import unittest
from interface.demo import RunMain # 从之前封装的文件中,引入RunMain类
import HTMLTestRunner
import json class TestMethod(unittest.TestCase): # 定义一个类,继承自unittest.TestCase def setUp(self):
self.run = RunMain() # 在初始化方法中实例化get/post基类,生成一个实例对象,这样就不需要在每个用例中再进行实例化了 def test01(self):
url = 'http://localhost:7001/XXX'
data = {
'controlSeq': ''
}
r = self.run.run_main(url, 'POST', data) # 调用RunMain类中run_main方法
print(r)
re = json.loads(r)
self.assertEqual(re['status'], '', '测试失败')
# globals()['userid'] = 22 #定义全局变量 def test02(self):
# print(userid) #使用case1中的全局变量,执行时需要全部执行,不能只执行后面的,不然会报错
url = 'http://localhost:7001/XXX'
data = {
"controlSeq": ""
}
r = self.run.run_main(url, 'GET', data)
print(r)
re = json.loads(r)
self.assertEqual(re["status"], '', '测试失败') # @unittest.skip('test03') # 跳过用例test03
def test03(self):
url = 'http://localhost:7001/XXX'
data = {
'controlSeq': '',
'seq': '',
'type': ''
}
r = self.run.run_main(url, 'POST', data)
print(r)
# print(type(r)) # 查看返回对象r的类型
re = json.loads(r)
# print(type(re)) #查看json对象解码后的类型
self.assertEqual(re['status'], '', '测试失败') if __name__ == "__main__":
suite = unittest.TestSuite() # 调用unittest的TestSuite(),理解为管理case的一个容器(测试套件)
suite.addTest(TestMethod('test01')) # 向测试套件中添加用例,"TestMethod"是上面定义的类名,"test01"是用例名,一条条地添加
suite.addTest(TestMethod('test02'))
suite.addTest(TestMethod('test03'))
    # test_cases = [Update("test_case_001"), Update("test_case_002"), Update("test_case_003"), Update("test_case_004"),
# Update("test_case_005"), Update("test_case_006"), Update("test_case_007"), Update("test_case_008")]
# suite.addTests(test_cases) # 批量添加测试用例
    runner = unittest.TextTestRunner()  
runner.run(suite) # 执行套件中的用例
此时再执行这个文件,就只会执行添加到测试套件中的case了

但是如果是使用的pycharm来运行脚本,则有几点需要注意,pycharm这里有个坑,困扰了我很久,在第三目中的小总结中说一下

记录python接口自动化测试--unittest框架基本应用(第二目)的更多相关文章

  1. python接口自动化测试 - unittest框架基本使用

    unittest简单介绍 单元测试框架 还可以适用WEB自动化测试用例的开发与执行 提供丰富的断言方法 官方文档:https://docs.python.org/zh-cn/3/library/uni ...

  2. python接口自动化测试 - unittest框架suite、runner详细使用

    test suite 测试套件,理解成测试用例集 一系列的测试用例,或测试套件,理解成测试用例的集合和测试套件的集合 当运行测试套件时,则运行里面添加的所有测试用例 test runner 测试运行器 ...

  3. 记录python接口自动化测试--简单总结一下学习过程(第十目)

    至此,从excel文件中循环读取接口到把测试结果写进excel,一个简易的接口自动化测试框架就完成了.大概花了1周的时间,利用下班和周末的时间来理顺思路.编写调试代码,当然现在也还有很多不足,例如没有 ...

  4. Python接口测试之unittest框架(五)

    Test-driven development(TDD)开发模式在今天已经不是什么新奇的事了,它的开发思维是在开发一个产品功能的时候,先 编写好该功能的测试代码,在编写开发比如,比如要写二个数相除的函 ...

  5. 记录python接口自动化测试--利用unittest生成测试报告(第四目)

    前面介绍了是用unittest管理测试用例,这次看看如何生成html格式的测试报告 生成html格式的测试报告需要用到 HTMLTestRunner,在网上下载了一个HTMLTestRunner.py ...

  6. 记录python接口自动化测试--requests使用和基本方法封装(第一目)

    之前学习了使用jmeter+ant做接口测试,并实现了接口的批量维护管理(大概500多条用例),对"接口"以及"接口测试"有了一个基础了解,最近找了一些用pyt ...

  7. 记录python接口自动化测试--从excel中读取params参数传入requests请求不生效问题的解决过程(第七目)

    在第六目把主函数写好了,先来运行一下主函数 从截图中可以看到,请求参数打印出来了,和excel中填写的一致 但是每个接口的返回值却都是400,提示参数没有传进去,开始不知道是什么原因(因为excel中 ...

  8. 记录python接口自动化测试--主函数(第六目)

    把操作excel的方法封装好后,就可以用准备好的接口用例来循环遍历了 我的接口测试用例如下 主函数代码: run_handle_excel.py# coding:utf-8 from base.run ...

  9. 记录python接口自动化测试--pycharm执行测试用例时需要使用的姿势(解决if __name__ == "__main__":里面的程序不生效的问题)(第三目)

    1.只运行某一条case 把光标移动到某一条case后面,然后右键,选择"Run..."来运行程序 此时,pycharm会只运行光标所在位置的这一条case 2.如果想执行全部ca ...

随机推荐

  1. 芝麻HTTP:非关系型数据库存储

    NoSQL,全称Not Only SQL,意为不仅仅是SQL,泛指非关系型数据库.NoSQL是基于键值对的,而且不需要经过SQL层的解析,数据之间没有耦合性,性能非常高. 非关系型数据库又可细分如下. ...

  2. 摘抄--全面理解面向对象的 JavaScript

    全面理解面向对象的 JavaScript JavaScript 函数式脚本语言特性以及其看似随意的编写风格,导致长期以来人们对这一门语言的误解,即认为 JavaScript 不是一门面向对象的语言,或 ...

  3. Alice and Bob HDU - 4268

    Alice and Bob's game never ends. Today, they introduce a new game. In this game, both of them have N ...

  4. 基于puppet分布式集群管理公有云多租户的架构浅谈

    基于puppet分布式集群管理公有云多租户的架构浅谈 一.架构介绍   在此架构中,每个租户的业务集群部署一台puppet-master作为自己所在业务集群的puppet的主服务器,在每个业务集群所拥 ...

  5. iOS工具——Xcode9无证书真机调试

    入坑iOS开发这么久,一直都是在模拟器上运行,公司的项目也都有公司的开发者账号进行真机调试.但是很多时候在网上download一些demo想在真机上运行看一下效果的时候都没法成行,今天抽空好好研究和学 ...

  6. 关系型数据库工作原理-查询优化器之索引(翻译自Coding-Geek文章)

    本文翻译自Coding-Geek文章:< How does a relational database work>.原文链接:http://coding-geek.com/how-data ...

  7. Kon-boot v2.5介绍与使用方法总结(支持win10)

    Kon-boot这个工具相信大家都不陌生,这是一款专门针对Windows.Linux.MAC登陆密码破解工具,他能绕过系统所设有的登陆密码,让你的登陆畅通无阻.KON-Boot的原理是在于处理BIOS ...

  8. 怎么解决VMware“该虚拟机似乎正在使用中”问题

    问题如下:

  9. Python+ Selenium自动化登录腾讯QQ邮箱实例

    学习了Python语言一段时间后,在公司的项目里也使用到了python来写测试脚本,一些重复的操作都使用脚本来处理了.大大的提高工作效率,减少了一些手工重复的操作. 以下是使用unittest框架写的 ...

  10. 关于js高度和宽度的获取 ----2017-03-29

    来源:百度  对错有待实践检验 网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHeight 网页可见区域宽: docu ...