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

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

原文发布于微信公众号 - Python自动化测试(wuya-python)

原文发表时间:2018-05-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏python开发者

python自动化测试(4)-使用第三方python库技术实现

python自动化测试(4)-使用第三方python库技术实现 1   概述 关于测试的方法论,都是建立在之前的文章里面提到的观点: 功能测试不建议做自动化 接...

2945
来自专栏SEO

「SEO技巧」页面分页优化技巧

3767
来自专栏编程一生

请一定记得升级java虚拟机

1224
来自专栏从零开始学自动化测试

python笔记32-ddt框架报告优化

至于什么是ddt这个可以参考我之前写的博客内容,使用ddt框架的时候,有个问题困扰我很久了,一直没得到解决(也有很大小伙伴问过我,没解决抱歉了!) 这个问题就是...

3494
来自专栏岑玉海

RavenDb学习(一)设计模式介绍

RavenDb是一个文档型的数据库,和芒果Db是一个类型的东西,但是公司选择了它,主要是因为它对事务的支持比较好,芒果Db在事务方面有问题。 下面有一个例子...

4447
来自专栏运维技术迷

Redis单线程架构

redis使用了单线程架构和I/O多路复用模型来实现高性能的内存数据库服务。 引出单线程模型 开启三个redis-cli客户端同时执行命令 客户端1设置一个字...

5308
来自专栏腾讯数据库技术

Linux调度原理介绍和应用(前篇)

3714
来自专栏web前端教室

前端开发就是这样,“看似简单的东西,反而会很复杂。”

今天的零基础前端课讲到了一个tab地址切换的菜单,就下面这个东西, ? 第一眼看起来超级简单,无非是点击上面的title显示下面的菜单,然后点省市区把内容选上去...

2226
来自专栏互联网杂技

前端面试题整理

交互设计前端开发 前言: 现在前端面试主要考察以下几个方面: 初级的:html、css、js,jquery,开发工具git的使用,对其他框架稍微了解; 中级的:...

4899
来自专栏java一日一条

怎样编写高质量的Java代码

怎样辨别一个项目代码写得好还是坏?优秀的代码和腐化的代码区别在哪里?怎么让自己写的代码既漂亮又有生命力?接下来将对代码质量的问题进行一些粗略的介绍。也请有过代码...

1651

扫码关注云+社区

领取腾讯云代金券