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

1.unittest简单用法

  1. # -*-coding:UTF:8-*-
  2.  
  3. import unittest
  4.  
  5. class TestMethod(unittest.TestCase): # 定义一个类,继承自unittest.TestCase
  6. # 每次执行用例前执行setUp(),可以在这里做一些初始化的工作
  7. def setUp(self):
  8. print('setUp')
  9.  
  10. # 每次执行用例后执行tearDown
  11. def tearDown(self):
  12. print('tearDown')
  13.  
  14. def test001(self): # unittest中的用例必须以test开头
  15. print('test001')
  16.  
  17. def test002(self):
  18. print('test002')
  19.  
  20. if __name__ == '__main__':
  21. unittest.main()
  22.  
  23. 运行结果如下:

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

  1. # -*-coding:UTF:8-*-
  2.  
  3. import unittest
  4.  
  5. class TestMethod(unittest.TestCase): # 定义一个类,继承自unittest.TestCase
  6. # 每次执行用例前执行setUp(),可以在这里做一些初始化的工作
  7. @classmethod
  8. def setUpClass(cls):
  9. print('setUp\n')
  10.  
  11. # 每次执行用例后执行tearDown
  12. @classmethod
  13. def tearDownClass(cls):
  14. print('tearDown')
  15.  
  16. def test001(self): # unittest中的用例必须以test开头
  17. print('test001')
  18.  
  19. def test002(self):
  20. print('test002')
  21.  
  22. if __name__ == '__main__':
  23. unittest.main()
  1. 运行结果如下:

2.接口测试实例

  1. # -*-coding:UTF:8-*-
  2.  
  3. import unittest
  4. from interface.demo import RunMain # 从之前封装的文件中,引入RunMain类
  5. import HTMLTestRunner
  6. import json
  7.  
  8. class TestMethod(unittest.TestCase): # 定义一个类,继承自unittest.TestCase
  9.  
  10. def setUp(self):
  11. self.run = RunMain() # 在初始化方法中实例化get/post基类,生成一个实例对象,这样就不需要在每个用例中再进行实例化了
  12.  
  13. def test01(self):
  14. url = 'http://localhost:7001/XXX'
  15. data = {
  16. 'controlSeq': ''
  17. }
  18. r = self.run.run_main(url, 'POST', data) # 调用RunMain类中run_main方法
  19. print(r)
  20. re = json.loads(r)
  21. self.assertEqual(re['status'], '', '测试失败')
    #注意我在进行断言前,先用json库的json.loads()函数对上一步中的返回结果r进行了解码,不然直接调用r['status']时会报错“json.loadsstring indices must be integers”
    #原因是,在之前的例子中,为了使显示效果更加直观,对服务器的响应结果利用json.dumps()进行了json格式的编码
  22. def test02(self):
  23. url = 'http://localhost:7001/XXX'
  24. data = {
  25. "controlSeq": ""
  26. }
  27. r = self.run.run_main(url, 'GET', data)
  28. print(r)
  29. re = json.loads(r)
  30. self.assertEqual(re["status"], '', '测试失败')
  31.  
  32. # @unittest.skip('test03') # 使用skip()方法表示跳过用例test03
  33. def test03(self):
  34. url = 'http://localhost:7001/XXX'
  35. data = {
  36. 'controlSeq': '',
  37. 'seq': '',
  38. 'type': ''
  39. }
  40. r = self.run.run_main(url, 'POST', data)
  41. print(r)
  42. # print(type(r)) # 查看返回对象r的类型
  43. re = json.loads(r)
  44. # print(type(re))
  45. self.assertEqual(re['status'], '', '测试失败')
  46.  
  47. if __name__ == "__main__":
  48. unittest.main() #表示执行全部用例

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

  1. # -*-coding:UTF:8-*-
  2.  
  3. import unittest
  4. from interface.demo import RunMain # 从之前封装的文件中,引入RunMain类
  5. import HTMLTestRunner
  6. import json
  7.  
  8. class TestMethod(unittest.TestCase): # 定义一个类,继承自unittest.TestCase
  9.  
  10. def setUp(self):
  11. self.run = RunMain() # 在初始化方法中实例化get/post基类,生成一个实例对象,这样就不需要在每个用例中再进行实例化了
  12.  
  13. def test01(self):
  14. url = 'http://localhost:7001/XXX'
  15. data = {
  16. 'controlSeq': ''
  17. }
  18. r = self.run.run_main(url, 'POST', data) # 调用RunMain类中run_main方法
  19. print(r)
  20. re = json.loads(r)
  21. self.assertEqual(re['status'], '', '测试失败')
  22. # globals()['userid'] = 22 #定义全局变量
  23.  
  24. def test02(self):
  25. # print(userid) #使用case1中的全局变量,执行时需要全部执行,不能只执行后面的,不然会报错
  26. url = 'http://localhost:7001/XXX'
  27. data = {
  28. "controlSeq": ""
  29. }
  30. r = self.run.run_main(url, 'GET', data)
  31. print(r)
  32. re = json.loads(r)
  33. self.assertEqual(re["status"], '', '测试失败')
  34.  
  35. # @unittest.skip('test03') # 跳过用例test03
  36. def test03(self):
  37. url = 'http://localhost:7001/XXX'
  38. data = {
  39. 'controlSeq': '',
  40. 'seq': '',
  41. 'type': ''
  42. }
  43. r = self.run.run_main(url, 'POST', data)
  44. print(r)
  45. # print(type(r)) # 查看返回对象r的类型
  46. re = json.loads(r)
  47. # print(type(re)) #查看json对象解码后的类型
  48. self.assertEqual(re['status'], '', '测试失败')
  49.  
  50. if __name__ == "__main__":
    suite = unittest.TestSuite() # 调用unittest的TestSuite(),理解为管理case的一个容器(测试套件)
  51. suite.addTest(TestMethod('test01')) # 向测试套件中添加用例,"TestMethod"是上面定义的类名,"test01"是用例名,一条条地添加
  52. suite.addTest(TestMethod('test02'))
  53. suite.addTest(TestMethod('test03'))
  1. # 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) # 批量添加测试用例
  1. runner = unittest.TextTestRunner()
    runner.run(suite) # 执行套件中的用例
  1. 此时再执行这个文件,就只会执行添加到测试套件中的case
  2.  
  3. 但是如果是使用的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. 【译】gRPC负载均衡

    原文地址:https://github.com/grpc/grpc/blob/master/doc/load-balancing.md gRPC负载均衡 范围 本文档解释了gPRC的负载均衡的设计. ...

  2. Python实现常用的数据结构

    Python中的数据结构   #巧用Python列表特性实现特定数据结构 #栈实现stack = []stack.push(x)stack.pop()stack[-1] #队列实现from colle ...

  3. 异常-----Template user.ftl not found

    freemarker 1.错误描述 java.io.FileNotFoundException: Template user.ftl not found. at freemarker.template ...

  4. 初识SSO与JWT

    以前在学校做项目的时候,登录注销,权限验证这些事情,都是交给框架来做的,每次都是把这个架子拿到项目中去,也没有真正思考过它的过程,总觉的这些都是十分简单的逻辑. 然而来公司工作之后,慢慢觉得登录和权限 ...

  5. CSS实现网页背景图片自适应全屏

    一张清晰漂亮的背景图片能给网页加分不少,设计师也经常会给页面的背景使用大图,我们既不想图片因为不同分辨率图片变形,也不希望当在大屏的情况下,背景有一块露白,简而言之,就是实现能自适应屏幕大小又不会变形 ...

  6. 描述一下Spring框架的作用和优点?

    Spring框架的作用和优点如下: 1.Spring是一个开源的轻量级的应用开发框架,其目的是用于简化企业级应用程序开发,减少侵入: 2.Spring提供的IOC和AOP应用,可以将组建的耦合度降低至 ...

  7. 【BZOJ1501】【NOI2005】智慧珠游戏(搜索)

    [BZOJ1501][NOI2005]智慧珠游戏(搜索) 题面 我要一改我懒惰的作风 这道题目必须放题面 Description Input 文件中包含初始的盘件描述,一共有10行,第i行有i个字符. ...

  8. C++与Java通过WebService通信(下)

    一. 前言 本篇讲述如何通过Java客户端访问C++服务端发布的SOAP模式的WebService接口.文档中的样例代码拷贝出去即可运行,所有的代码都是本地测试OK的:本文不但解决了接口调用的问题,同 ...

  9. 18.CSS

    选择器 1.标签上直接设置style属性 <p style="color: red">直接标签里面写</p> 2.id选择器 <style> # ...

  10. java--Object类接受任意引用数据类型对象

    java学习进展到类,首先就对万类之父Object类进行举例练习,这里我是对一维数组和接口用Object接受数组和接口. package test1; public class enum1 { pub ...