Unittest自动化测试框架教程

Unittest自动化测试框架教程,第1张

  “  本文介绍了unittest中测试套件的相关概念,并通过实例帮助理解测试套件存在的意义,自由享用即可。”

PS:“ 老规矩,老手or实战应用型用户文末看总结,学习型用户顺序阅读 ”

  • 博主每篇文章的注释都是干货!每个代码段都有详细注释,一定要认真看注释!!!
  • 重要的事情说三遍:一定要看注释!!!一定要看注释!!!一定要看注释!!!

前情提要
  • 本文建议在熟悉测试用例以及测试流程的基础下食用,能更好帮助理解套件存在的意义及使用

引言
  • 测试套件:执行已编写的测试用例,特点:可用于执行不同类测试用例之间指定测试用例组合测试,也可指定某类、某些类测试用例单独测试

  • 例如:

  • 登陆类测试用例:1.登录成功    2.登录失败

  • 账户类测试用例:1.用户A    2.用户B

  • 测试套件的功能:可单独执行登录类测试用例、执行用户A+登录成功的用例

  • 一定要认真看注释!!!
# 测试用例文件和测试套件文件要分开!!!
# 这里笔者将此测试用例命名为Testcases
# Testcase.py文件内容:
# 文件说明:Testcase.py中有两类测试用例(login和data类),每一类测试用例下有两个测试用例
import unittest
class Testcase1_login(unittest.TestCase):
    def test1(self):
        print('执行Testcase1_login的test1')
    def test2(self):
        print('执行Testcase1_login的test2')

class Testcase2_data(unittest.TestCase):
    def test1(self):
        print('执行Testcase2_data的test1')
    def test2(self):
        print('执行Testcase2_data的test2')

基本框架
  • 核心:导入测试用例模块(自己编写的),类的实例化
  • 一定要认真看注释!!!
# 测试套件文件内容!!!
# 一定要记得和测试用例文件互相独立
import unittest
import Testcases    # 导入测试用例,这里模块名是自己建立的测试用例文件名
suite = unittest.TestSuite()    # 类的实例化!!!要加括号才是实例化

# 一次添加单个测试用例
suite.addTest(Testcases.Testcase1_login('test1'))     # 添加第1类测试用例中的第1个测试用例
suite.addTest(Testcases.Testcase2_data('test1'))     # 添加第2类测试用例中的第1次测试用例

r = unittest.TextTestRunner()     # 类的实例化!!!要加括号才是实例化
r.run(suite)  # 运行测试套件

# 执行结果见下图
# 实现了指定测试用例的执行


应用
  • 一次添加多个测试用例,列表存储
  • 一定要认真看注释!!!
import unittest
import Testcases

suite = unittest.TestSuite()   
 
# 一次添加单个测试用例
# suite.addTest(Testcases.Testcase1_login('test1'))     # 添加第1类测试用例中的第1个测试用例
# suite.addTest(Testcases.Testcase2_data('test1'))     # 添加第2类测试用例中的第1次测试用例

# 一次添加多个测试用例,改为addTests,以列表形式存储,和上述方法等价,但简化了代码
# 注意调用的是addTests不是addTest
# Testcases.Testcase1_login('test1')表示文件Testcases类中子类Testcase_login的方法test1
suite.addTests([Testcases.Testcase1_login('test1'), Testcases.Testcase2_data('test1')])

r = unittest.TextTestRunner()     # 类的实例化!!!要加括号才是实例化,否则是一个类
r.run(suite)  # 运行套件
  • 以变量形式指定测试内容(推荐方法)
  • 一次添加多个测试用例,并增加程序可读性
  • 一定要认真看注释!!!
# 使程序更加可读,变量存储指定测试内容
suite = unittest.TestSuite()   

# 以变量形式存储指定测试内容,便于修改且增加程序可读性
tests = [
    Testcases.Testcase1_login('test1'),
    Testcases.Testcase2_data('test1')
]
suite.addTests(tests)

r = unittest.TextTestRunner()     
r.run(suite)  
 装载器的使用
  • 装载器类型

  • loadTestsFromTestCase('测试用例的类名')

  • loadTestsFromModule('测试用例文件名/模块名')

  • loadTestsFromName('测试用例文件名/测试用例类名通用')

  • 使用类装载器,示例:

  • 一定要认真看注释!!!
# Testcase1_login()类下有两个用例test1、test2
# class Testcase1_login(unittest.TestCase):
#     def test1(self):
#         print('执行Testcase1_login的test1')
#     def test2(self):
#         print('执行Testcase1_login的test2')

####################################################
# 使用类装载器
# 一次执行一类测试用例
suite = unittest.TestSuite()
L = unittest.TestLoader()   # 装载器实例化,注意加()
suite.addTests(L.loadTestsFromTestCase(Testcases.Testcase1_login))  
# 设置加载方式为Testcase中login类测试用例,Case()待测试的类
run = unittest.TextTestRunner()
run.run(suite)

# 测试结果见下图

 

  • 使用模块装载器,示例:

  • 一定要认真看注释!!!
# Testcases文件下有两类测试用例,每一类中有两个测试用例,总共四个测试用例
class Testcase1_login(unittest.TestCase):
    def test1(self):
        print('执行Testcase1_login的test1')
    def test2(self):
        print('执行Testcase1_login的test2')

class Testcase2_data(unittest.TestCase):
    def test1(self):
        print('执行Testcase2_data的test1')
    def test2(self):
        print('执行Testcase2_data的test2')

# 一次执行一个模块的测试用例
suite = unittest.TestSuite()
L = unittest.TestLoader()   # 装载器实例化,注意加()
suite.addTests(L.loadTestsFromModule(Testcases))    # 从模块名载入
run = unittest.TextTestRunner()
run.run(suite)

# 测试结果见下图,执行了模块下的4次测试

 

  • 使用name装载器(推荐方法:类名/文件名通用),示例:

  • 一定要认真看注释!!!
# Testcases文件下有两类测试用例,每一类中有两个测试用例,总共四个测试用例
class Testcase1_login(unittest.TestCase):
    def test1(self):
        print('执行Testcase1_login的test1')
    def test2(self):
        print('执行Testcase1_login的test2')

class Testcase2_data(unittest.TestCase):
    def test1(self):
        print('执行Testcase2_data的test1')
    def test2(self):
        print('执行Testcase2_data的test2')

# 使用name装载器,类名/模块名通用
# 推荐
suite = unittest.TestSuite()
L = unittest.TestLoader()

suite.addTests(unittest.TestLoader().loadTestsFromName('Testcases'))    # 装载Testcases模块名
suite.addTests(unittest.TestLoader().loadTestsFromName('Testcases.Testcase1_login'))    # 装载Testcase1_login类名

run = unittest.TextTestRunner()
run.run(suite)

# 测试结果见下图,执行6次测试

  • 模块过滤装载器,大型测试用例使用
  • unittext.defaultTestLoader.discover()
  • 一定要认真看注释!!!

# 测试用例TestCases文件内容
# import unittest
# class Testcase1_login(unittest.TestCase):
#     def test1(self):
#         print('执行Testcase1_login的test1')
#     def test2(self):
#         print('执行Testcase1_login的test2')
# 
# class Testcase2_data(unittest.TestCase):
#     def test1(self):
#         print('执行Testcase2_data的test1')
#     def test2(self):
#         print('执行Testcase2_data的test2')

# 过滤装载器:defaultTestLoader.discover
all_tests = unittest.defaultTestLoader.discover(start_dir='./', pattern='Testcase*.py')
# start_dir筛选路径, pattern筛选文件名
# 默认装载器,可以执行指定路径,指定名字的测试模块,'./'表示当前文件夹,TestCase*.py表示前缀是Testcase的文件都会被执行
# 过滤为当前文件夹下以TestCase为前缀的用例,我们用例为TestCases且在当前文件夹,因此会执行
runner = unittest.TextTestRunner()
runner.run(all_tests)

# 测试结果见下图

 


 总结
  • 测试套件:可用于执行不同类测试用例之间指定测试用例组合
  • 测试指定用例组合:以变量形式指定测试内容(推荐方法,程序可读性高)
  • 测试指定类/指定模块用例组合:使用name装载器(推荐方法,类名/文件名通用)

💗 “ 任何时候都不要忘记爱自己,保持自己的人格魅力,学会爱自己,才是终身浪漫的开始。” 

                                                                          ——Created By 是羽十八ya

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/885801.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-14
下一篇 2022-05-14

发表评论

登录后才能评论

评论列表(0条)

保存