还记不记得我们软件测试学习的时候,按照定义:单元测试就是对单个模块或者是单个函数进行测试,一般是开发做的,按照阶段来分,一般就是单元测试,集成测试,系统测试,验收测试。
?
对于我们测试来说:我们就单元测试是为了执行测试用例
输入测试数据à输出测试结果
?TestCase:一个testcase的实例就是一个测试用例:
TestSuite:多个测试用例集合在一起。TestLoader:用来加载TestCase到TestSuite中的
TextTestRunner:用来执行测试用例的。
fixture:测试用例环境的搭建和销毁,测试前准备环境的搭建(setup),执行测试代码(run)
以及测试后环境的还原(tearDown)
我们会一个一个的来讲解,这些理论是怎么跟时间结合起来的。
测试需求一
def login_check(username,password):
“””
登录校验的函数
:param username:账户
:param password:密码
:return:
“””
if 6 <= len(password) <= 18:
if username == ‘python18’ and password == ‘123456’:
return {“code”:0,”msg”:”登录成功”}
else:
return{“code”:1,”msg”:”账号或密码不正确”}
else:
return {“code”:1,”msg”:”密码长度在6-18位之间”}
设计用例测试上面的登录校验功能是否正常?
“””
账号、密码正确??????????????????????????????????????? à {“code”:0,”msg”:”登录成功”}
账号正确,密码在6-18之间(不正确)?? à{“code”:1,”msg”:”账号或密码不正确”}
账号正确,密码长度少于6?????????????????????? à{“code”:1,”msg”:”密码长度在6-18位之间”}
账号正确,密码长度大于18???????????????????? à{“code”:1,”msg”:”密码长度在6-18位之间”}
错误的账户,密码正确???????????????????????????? à{“code”:1,”msg”:”密码长度在6-18位之间”}
…
继承unittest里面的TestCase类,继承这个类,写能写测试用例。每个用例我们都要记得引入fixture,做一些准备以及结束的工作。
??? 编写用例步骤如下:
class LoginCheckTes(unittest.TestCase):
#登录校验测试
def setUp(self):
print(‘每条用例开始执行’)
def test_login(self):
def test_password_error(self):
def test_user_error(self):
?
执行顺序是按照ASCII编码来的
TestSuite:测试集,把所有的用例都存进来。常用方法如下:
unittest.TestSuite()
方法一:addTest()添加一个测试用例
unittest.TestLoader()
方法二:unittest.TestLoader.loadTestsFromModule(模块名)不需要加引号(注意要导入模块)
方法三:unittest.TestLoader.loadTestsFromTestCase(测试类名)不需要加引号
总结与疑问:
1:定义的测试类和测试套件写在不同的模块里,为什么?
2:为何引入测试集,方便批量进行单元测试
完整的单元测试很少只执行一个测试用例,开发人员通常需要编写多个测试用例才能对某一软件功能进行比较完整的测试,这些相关的测试用例称为一个测试用例集,用TestSuite类来表示的,用到的是TestSuie(),用addTest
断言方法
?
测试用例已经集合完毕,如何来执行用例?
? 需要用到TextTestRunner,执行测试集,用到的是TextTestRunner(),用run方法。
?????? #创建runner对象,
?????? runner=unittest.TextTestRunner()
?????? #这里传入测试集合执行
?????? runner.run(suite)
测试结果怎么看?
?????? . 表示用例通过 一个点表示一个用例
?????? E表示出错了
?????? F表示不通过
text类型报告:
?????? #创建一个文件,以写的方式打开
???????html类型报告:
?
? now = time.strftime(‘%Y-%m-%d%H%M%_%S’)#随机生成时间
?????? 需要下载HTMLTestRunnerNew
每个用例写的代码都是一样的?有没有优化的方法?
用例的数据可不可独立出来??
注意点,每条用例是一条TestCase类的对象,创建对象初始化时需要注意__init__方法
?
感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
?
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取?