前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >初始python单元测试框架unittest与webdriver的关系(一)

初始python单元测试框架unittest与webdriver的关系(一)

作者头像
无涯WuYa
发布2018-10-25 16:20:38
1K0
发布2018-10-25 16:20:38
举报
文章被收录于专栏:Python自动化测试

unittest是属于python的单元测试框架,和java的junit,c#的nunit雷同,unittest的详细说明,具体见官方的地址:https://docs.python.org/2/library/unittest.html。unittest单元测试给我们提供了创建测试用例,测试套件,以及测试固件。unittest在安装pyhton以后,直接自带了,可以直接使用。作为单元测试,是对程序最小模块的一种敏捷化的测试,更多的是开发作为对自己代码质量的一种考核,测试驱动的方法中,测试先行,开发接着来。在自动化测试中,我们虽然没有按照这样的模式来,但是有一个基本的事实的,当我们把selenium2的API全部学习完后,但是作为自动化测试来说,我们不可能把N个测试点,写在一个python的文件里面,即使一个简单的文本输入框,我们要测试它的边界值,敏感字符等,如果写在一个文件中,执行失败后,我们得仔细的查看到底是边界值出问题了还是其他出问题了,导致该部分执行失败,显然,这样的自动化,不是我们想要的,也会给成本增加很多的,也无法达到自动化的要求,更加无法处理几百几千个测试用例的批量执行。那么,就让我们来了解神秘的unittest,unittest的关系图具体见如下截图的层级关系:

Test Case

测试用例是单元测试中最小的单位,它的任务就是检查对于具体的功能是否和期望的功能一直,这期间会使用到assert等断言,对于一个单独的case来说,它具有稳定性,独立性,可持续性,以及期望结果等特点。

Test Suite

测试套件,顾名思义,就是测试容器,通俗的说就是一个或者多个测试用例的集合,一般我们会用到addTest(),makeSuite()等方法。

Test Runner

Test Runner是指执行测试套件中的测试用例,并且呈现给用户结果,一般会使用到run(),TextTestRunner()的方法。

Test Report

对自动化测试来说,测试报告是必须的,依据自动化的测试报告,我们可以详细的了解到通过或失败的测试用例,预期与结果的结果状态,在python的自动化测试中,一般通过HTMLTestRunner.py来实现的,HTMLTestRunner.py具体下面还会再详细介绍。

当然,如上的问题,就让selenium IDE给我们揭开谜底,我们层层剥开,进入TDD的测试模式。Seleniumide只可以安装在firefox中,看成firefox的一个插件安装进去,下载地址是selenium的官方地址(http://docs.seleniumhq.org/projects/ide/plugins.jsp),下载文件后,直接拖动到firefox的浏览器,点击选择全部安装,安装成功后,会提示重新启动浏览器,重新启动firefox的浏览器后,在工具栏,就可以看到seleniumide,点击seleniumide,显示出seleniumide的程序部分,见截图:

就已selenium ide录制百度搜索,来引入单元测试,打开百度,在搜索输入框中输入框webdriver,点击百度一下安装,见录制的截图:

点击selenium ide的文件下拉框,点击Export Test Case As,点击Python 2/unittest/webdriver,见截图:

保存文件为demo.py文件,打开demo.py文件,可以看到如下的代码:

# -*- coding: utf-8 -*-

from selenium import webdriver

from selenium.webdriver.common.byimport By

fromselenium.webdriver.common.keys import Keys

fromselenium.webdriver.support.ui import Select

from selenium.common.exceptionsimport NoSuchElementException

from selenium.common.exceptionsimport NoAlertPresentException

import unittest, time, re

class Demo(unittest.TestCase):

def setUp(self):

self.driver = webdriver.Firefox()

self.driver.implicitly_wait(30)

self.base_url ="https://www.baidu.com/"

self.verificationErrors = []

self.accept_next_alert = True

def test_demo(self):

driver = self.driver

driver.get(self.base_url +"/")

driver.find_element_by_id("kw").click()

driver.find_element_by_id("kw").clear()

driver.find_element_by_id("kw").send_keys("webdriver")

driver.find_element_by_id("su").click()

def is_element_present(self, how, what):

try: self.driver.find_element(by=how,value=what)

except NoSuchElementException, e:return False

return True

def is_alert_present(self):

try: self.driver.switch_to_alert()

except NoAlertPresentException, e:return False

return True

def close_alert_and_get_its_text(self):

try:

alert = self.driver.switch_to_alert()

alert_text = alert.text

if self.accept_next_alert:

alert.accept()

else:

alert.dismiss()

return alert_text

finally: self.accept_next_alert = True

def tearDown(self):

self.driver.quit()

self.assertEqual([],self.verificationErrors)

if __name__ =="__main__":

unittest.main()

如上的代码,就是一个完整的自动化的case,下面分别解释下代码部分:

def setUp(self):

self.driver = webdriver.Firefox()

self.driver.implicitly_wait(30)

self.base_url ="https://www.baidu.com/"

self.verificationErrors = []

self.accept_next_alert = True

def tearDown(self):

self.driver.quit()

self.assertEqual([],self.verificationErrors)

如上代码部分为unittest的测试固件,分别为setUp和tearDown(),在 setUp部分中,打开url,也就是测试地址https://www.baidu.comtearDown()部分是结束测试,重点说明,setup 和tearDown()部分,有多少个自动化的case,就执行多少次。

def test_demo(self):

driver = self.driver

driver.get(self.base_url +"/")

driver.find_element_by_id("kw").click()

driver.find_element_by_id("kw").clear()

driver.find_element_by_id("kw").send_keys("webdriver")

driver.find_element_by_id("su").click()

如上代码为测试点部分,该测试点为在百度搜索输入框输入webdriver,然后点击百度一下,重点说明,在python的unittest的单元测试中,开头必须是test,否则unittest会不识别的。

那么精简后的自动化测试脚本为:

# -*- coding: utf-8 -*-

from selenium import webdriver

from selenium.webdriver.common.byimport By

fromselenium.webdriver.common.keys import Keys

fromselenium.webdriver.support.ui import Select

from selenium.common.exceptionsimport NoSuchElementException

from selenium.common.exceptionsimport NoAlertPresentException

import unittest, time, re

class Demo(unittest.TestCase):

def setUp(self):

self.driver = webdriver.Firefox()

self.driver.implicitly_wait(30)

self.base_url =https://www.baidu.com/

def test_demo(self):

driver = self.driver

driver.get(self.base_url +"/")

driver.find_element_by_id("kw").click()

driver.find_element_by_id("kw").clear()

driver.find_element_by_id("kw").send_keys("webdriver")

driver.find_element_by_id("su").click()

def tearDown(self):

self.driver.quit()

if __name__ =="__main__":

unittest.main()

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档