对自动化测试的几点思考(三)

       在前面的两个文章中关于接口测试,自动化测试聊了很多,那今天就说下在自动化测试中的断言,在自动化测试中,没有断言的测试用例是无效的,这是我一直的想法,那么怎么样的断言是正确的,一个自动化测试用例增加了断言就可以完全的放心了吗?在自动化测试中,我感觉最可怕的不是测试用例的维护,以及它的编写,最可怕的是功能存在问题,而自动化测试用例执行后,结果竟然是PASS,这会导致很严重的后果和质疑。

      既然说到自动化测试断言这部分,就以简单的例子来说明这点,就按UI级别的自动化测试来举例,案例是打开百度首页,验证title是否是“百度一下,你就知道”,见代码:

#!/usr/bin/env python

#coding:utf-8



import  

unittest

from

selenium

import  

webdriver



class

UITest

(unittest.TestCase):

def

setUp

(

self

):

self

.driver=webdriver.Firefox()

self

.driver.maximize_window()

self

.driver.get(

"http://www.baidu.com"

)

self

.driver.implicitly_wait(

30

)



def

tearDown

(

self

):

self

.driver.quit()



def

test_baidu_title

(

self

):

title

=

self

.driver.title

if

title

==

u"

百度一下,你就知道

"

:

print

(

"pass"

)

else

:

print

(

"fail"

)



if

__name__ ==

"__main__"

:

unittest.main(

verbosity

=

2

)

针对上面的代码,不管怎么执行,在自动化的测试报告中,该用例永远是pass的,在自动化测试的测试代码中,尽量少使用if这些判断的代码,自动化测试的结果很简单,要么是PASS,要么是FAIL,没有第三种情况,所以也就意味着断言一定要准确,不能出现的结果让人去猜或者是模棱两可的说不清楚,上面代码的问题就在于不管这个判断打印结果是pass还是fail,在自动化测试结果中,这个用例是pass的,不会因为打印的结果是fail,用例执行结果也是fail。另外需要注意的是在测试用例的断言中也不要使用try异常处理的方式,不能说因为执行失败了就去处理异常,如果代码执行失败就应该让失败,通过失败来定位是功能bug还是测试代码写的不对,针对if判断和try异常这些,可以放在对象层中,尽量避免在测试层中。对上面的代码进行修改,见修改后的代码:

#!/usr/bin/env python

#coding:utf-8



import  

unittest

from

selenium

import  

webdriver



class

UITest

(unittest.TestCase):

def

setUp

(

self

):

self

.driver=webdriver.Firefox()

self

.driver.maximize_window()

self

.driver.get(

"http://www.baidu.com"

)

self

.driver.implicitly_wait(

30

)



def

tearDown

(

self

):

self

.driver.quit()



def

test_baidu_title

(

self

):

self

.assertEqual(

self

.driver.title

,

u"

百度一下,你就知道

"

)



if

__name__ ==

"__main__"

:

unittest.main(

verbosity

=

2

)

    今天就先写到这,谢谢阅读!如您对我写的内容感兴趣,扫描如下二维码关注本人的微信公众号,谢谢!!!

对自动化测试的几点思考(三)