说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!
接着上一篇博客继续往下写 :2019 Selenium3与Python3实战开发Web自动化测试框架(一)_cdtaogang's blog-CSDN博客_python web自动化测试入门与实战
目录
四丶Unittest介绍及项目实战中的运用
1.unittest介绍及运用
- 在case包下创建一个unittest_case模块,编写如下代码,在继承unittest模块的TestCase类时,需要定义以test开头的方法才能在运行unittest测试代码时被调用执行
# -*- coding: utf-8 -*-
__author__ = 'cdtaogang'
__date__ = '2019/7/3 18:48'
import unittest
class FirstCase_02(unittest.TestCase):
def test_01(self):
print("test_01")
def test_02(self):
print("test_02")
def say_hello(self):
print("say_hello")
if __name__ == '__main__':
unittest.main()
- 运行以上代码,结果已说明一切,只调用了以test开头的方法
2.unittest前置条件和后置条件
- 每当执行一条case前都会先去调用setUp方法,case执行完成后又会去调用tearDown方法;根据这个特性就可以与first_case中的po模型结合解决之前遗留的注册页面输入框内容清空的问题
3.unittest和po模型结合梳理执行所有case
说明:在first_case模块中让FirstCase类继承unittest.TestCase类,这样的话就可以定义setUp方法来完成创建一个全局的driver,因为其特性可以在执行每条case时候会去执行setUp方法即打开一个新的浏览器窗口,这样的话就解决了同意浏览器执行多条case时,输入框内容不清空的问题,然后再在FirstCase类中定义tearDown方法来关闭浏览器窗口,最后在执行case的时候就不需要main函数,因为我们的FirstCase类继承于unittest.TestCase类并且我们的测试方法均以test开头的,只需要在if __name__ == '__main__':中调用unittest.main()方法即可,堪称完美
- unittest和po模型结合结合后,first_case模块中的代码如下
- 运行代码,成功测试5个case,测试结果正确,说明一下测试结果,博主测试的数据全是回到错误提示信息,所以在以下无的结果中4个提示的是注册失败了,此条case执行成功,注册失败对应的case为test_register_success该测试条件为测试注册页面中是否存在获取得到注册功能的元素,不存在则表示注册成功反之则表示注册失败,因为验证码这块还没有加入代码中所以test_register_success这个case肯定是注册失败的
- 为了验证打印"注册成功,此条case执行失败"即表示注册页面没有要测试的错误提示信息,所以博主将test_register_username_error这个case传入的注册数据中的name的数据改为正确格式的数据,则就会出现调用get_error_msg方法返回的text值为None,说明页面没有该错误提示信息元素了,需要注意的通过get_element获取不到页面元素时则返回None,那么在get_error_msg方法中去调用element对象的text方法则会提示错误,因为None没有任何方法,所以在get_error_msg中需要进行异常处理,当出现异常则表示无法找到页面中错误提示信息的元素,即text=None,代码如下
def get_error_msg(self, info, error_msg):
"""获取错误信息"""
try:
if info == "email_error":
text = self.reg_page.get_user_email_error_element().text
elif info == "username_error":
text = self.reg_page.get_user_name_error_element().text
elif info == "password_error":
text = self.reg_page.get_password_error_element().text
else:
text = self.reg_page.get_captcha_code_error_element().text
except:
text = None
return text
- 紧接着在first_case模块中的test_register_username_error方法中将传递的name值改为正确格式的数据,运行代码后,在测试结果中成功打印出"注册成功,此条case执行失败"即表示测试的用户名数据注册成功
4.unittest容器的使用
- 使用装饰器来管理测试类中定义的方法
- 运行代码后,从结果可以看出setUpClass方法是在所有case执行前执行,tearDownClass方法则是在所有case执行之后才执行
- 使用unittest容器,只执行想要执行的case,只需要添加test_02到容器中,最后运行容器即可
- 运行代码后,成功的只执行test_02的case
5.unittest用例执行顺序及case跳过
- case执行顺序,默认是以字母或者数字的升序进行执行的,如下在代码中添加test_03查看执行顺序
- 通过容器来控制执行的顺序
- 如不想执行test_03这条case,可以使用unittest.skip方法进行case的跳过
6.如何大批量运行case文件
- 如在case包下创建一个unittest_case02.py模块,模块中有与unittest_case同样的case,如何同时运行两个模块中的case