python+selenium+unittest单元测试框架

unittest简介

python自动化测试不得不提unittest,unittest原名为PyUnit是python自带的单元测试框架,类似于java的JUnit是有JUnit衍生而来。

unittest官网地址:https://docs.python.org/2/library/unittest.html

unittest整体结构

unittest库包括:TestCase、TestSuite、TestLoder、TextRunner、TextTestResult、TestFixture

TestCase是测试的最小单元模块。它检查对特定输入集合的特定响应。unittest提供给一个基类Testcase,可以使用这个类创建一个新测试testTestCase 。

TestSuite是测试集,测试集是测试用例、测试集或者二者的一个集合。它被用于把测试整合在一起,批量运行测试。

TestLoder是用来加载 TestCase到TestSuite中,其中有几个loadTestsFrom_()方法,就是从各个地方寻找TestCase,创建他们的实例,然后add到TestSuite中,再返回一个TestSuite实例

TextRunner是运行测试器, 测试运行器是协调测试执行并向用户提供结果的组件。运行器可以使用图形界面、文本界面、或返回特定值来指示执行测试的结果。

TextTestResult测试结果会保存到TextTestResult实例中,包括运行了多少用例,成功与失败多少等信息

TestFixture表示执行一个或者多个测试前的准备工作,确保每个测试之间的独立性。这可能涉及到创建临时或者代理数据库、目录、服务器情动进程等相关准备工作

实例

from selenium import webdriver
import unittest
import time

class login1Test(unittest.TestCase):
def setUp(self):
self.url='http://test1.xgs.xiaoshushidai.com'
self.driver=webdriver.Firefox()
self.driver.maximize_window()
self.driver.implicitly_wait(30)#隐性等待30秒
self.driver.get(self.url)

def login(self,username,passwrod,txtVerify):
self.driver.find_element_by_id('txtUserName').send_keys(username)
self.driver.find_element_by_id('txtPassword').send_keys(passwrod)
self.driver.find_element_by_id('txtVerify').send_keys(txtVerify)
self.driver.find_element_by_id('btnSubmit').click()

def tearDown(self):
self.driver.quit()

def test_loginsSuccess(self):
'''登录成功'''
self.login("T_mac",'Aa654321','123')
tip=self.driver.find_element_by_class_name('info').text
print(tip)
self.assertEqual(tip,'您好,T_mac''\n''测试删除')

def test_nulluser(self):
'''用户名为空'''
self.login('','','')
self.driver.switch_to.alert().accept()
nullusererror=self.driver.switch_to.alert().text
self.assertEqual(nullusererror,'请输入管理员账号')

def test_nullpwd(self):
'''密码为空'''
self.login('13620180611','','')
self.driver.switch_to.alert().accept()
nullpassword=self.driver.switch_to.alert().text
self.assertEqual(nullpassword,'请输入管理员密码')

def test_nulltxtVerify(self):
self.login('13620180611','Aa654321','')
self.driver.switch_to.alert().accept()
nulltxtVerify=self.driver.switch_to.alert().text
self.assertEqual(nulltxtVerify,'请输入验证码')

if __name__=='__main__':
unittest.main()

某网站的登录setUp是初始化函数表示运行每个用例时首先需要初始化用例为test_xxx。teraDown为清除数据

test_xxx命名的函数为测试用例unittest.main()识别类中的以test_xxx命名的函数(执行测试用例)

构造测试用例集

# coding=utf-8
import unittest
from xiaoshutest.login import login1Test
import HTMLTestRunnerCN
#构造测试集
suite=unittest.TestSuite()
suite.addTest(login1Test('test_loginsSuccess'))
suite.addTest(login1Test('test_loginfail'))
suite.addTest(login1Test('test_loginusernamefail'))
suite.addTest(login1Test('test_nulluser'))
suite.addTest(login1Test('test_nullpwd'))
表示在suite中添加上面例子中测试类的login1Test中的测试用例

if __name__=='__main__':
#执行测试

runner=unittest.TestSuite()
with open('HTMLReport.html','wb+') as f:
runner=HTMLTestRunnerCN.HTMLTestReportCN(stream=f,title='测试报告',description='测试报告详情',verbosity=2,tester='miss→麦')
runner.run(suite)#运行suite把报告写成HTML格式
f.close()

用例的运行报告

 

 

posted @ 2018-09-27 18:43  miss→麦  阅读(10762)  评论(0编辑  收藏  举报