selenium~使用unittest测试框架,批量执行测试脚本,addTest、makeSuite、TestLoader、discover的使用

unittest框架解析


  • unittest 是python 的单元测试框架, 在python 的官方文档中,对unittest有详细的介绍,想更深一步研究的同学可以到https://www.python.org/doc/ 去了解。

  • unittest 单元测试提供了创建测试用例,测试套件以及批量执行的方案, unittest 在安装pyhton 以后就直接自带了,直接import unittest 就可以使用。

  • 作为单元测试的框架, unittest 也是可以对程序最小模块的一种敏捷化的测试。在自动化测试中,我们虽然不需要做白盒测试,但是必须需要知道所使用语言的单元测试框架。

  • 利用单元测试框架,创建一个类,该类继承unittest的TestCase,这样可以把每个case看成是一个最小的单元, 由测试容器组织起来,到时候直接执行,同时引入测试报告.

准备工作


  • 敲好来个测试类, 继承unittest.TestCase

  • test1.py文件

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.common.keys import Keys

from selenium.webdriver.support.ui import Select

from selenium.common.exceptions import NoSuchElementException

from selenium.common.exceptions import NoAlertPresentException

import unittest

import time

import re

class TestBaiDu1(unittest.TestCase):

setUp用来初始化环境 每执行一个测试方法都会先执行这个方法

self表示这个类的实例

def setUp(self) -> None:

self.driver = webdriver.Chrome()

self.driver.implicitly_wait(30)

self.base_url = “http://www.baidu.com”

测试用例必须用test开头

def test_baiDuSearch(self):

driver = self.driver

driver.get(self.base_url + “/”)

driver.find_element_by_id(“kw”).click()

driver.find_element_by_id(“kw”).clear()

u表示字符编码

driver.find_element_by_id(“kw”).send_keys(u"测试")

driver.find_element_by_id(“su”).click()

driver.find_element_by_id(“su”).click()

def test_hao(self):

driver = self.driver

driver.get(self.base_url + “/”)

driver.find_element_by_link_text(“hao123”).click()

清除环境工作 每执行完一个测试用例都会执行这个

def tearDown(self) -> None:

time.sleep(3)

self.driver.close()

if name == “main”:

执行测试用例

unittest.main()

  • test2.py文件

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.common.keys import Keys

from selenium.webdriver.support.ui import Select

from selenium.common.exceptions import NoSuchElementException

from selenium.common.exceptions import NoAlertPresentException

import unittest, time, re

class TestBaiDu2(unittest.TestCase):

def setUp(self) -> None:

self.driver = webdriver.Chrome()

self.driver.implicitly_wait(30)

self.base_url = “http://www.baidu.com”

def test_baiDuSearch(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(u"詹姆斯")

driver.find_element_by_id(“su”).click()

driver.find_element_by_id(“su”).click()

def tearDown(self) -> None:

time.sleep(3)

self.driver.close()

if name == “main”:

unittest.main()

addTest() 的应用


  • 当有多个或者几百测试用例的时候, 这样就需要一个测试容器( 测试套件) ,把测试用例放在该容器中进行执行,unittest 模块中提供了TestSuite 类来生成测试套件,使用该类的构造函数可以生成一个测试套件的实例,该类提供了addTest来把每个测试用例加入到测试套件中。

  • AddTest.py文件

import unittest, csv

import test1, test2

import os, sys

import time

手工添加测试用例到套件

def createSuite():

初始化一个测试套件

suite = unittest.TestSuite()

将测试用例添加到测试套件中

suite.addTest(test1.TestBaiDu1(“test_baiDuSearch”))

suite.addTest(test1.TestBaiDu1(“test_hao”))

suite.addTest(test2.TestBaiDu2(“test_baiDuSearch”))

return suite

if name == “main”:

suite = createSuite()

2表示显示详细信息

runner = unittest.TextTestRunner(verbosity=2)

执行测试套件

runner.run(suite)

makeSuite()和TestLoader()的应用


  • 上述addTest有一个不方便的就是如果一个类有十几个甚至几十个测试用例, 如果每一次多add一次的话就太麻烦了, 所以就有makeSuite()和TestLoader()他们会自动加载你输入的类中的所有此时用例

makeSuite()

  • 在unittest 框架中提供了makeSuite() 的方法,makeSuite可以实现把测试用例类内所有的测试case组成的测试套件TestSuite ,unittest 调用makeSuite的时候,只需要把测试类名称传入即可。

  • makeSuitTest.py文件

import unittest, csv

import os, sys

import time

import test1

import test2

手工添加案例到套件,

def createSuite():

suite = unittest.TestSuite()

将测试用例加入到测试容器(套件)中

suite.addTest(unittest.makeSuite(test1.TestBaiDu1))

suite.addTest(unittest.makeSuite(test2.TestBaiDu2))

return suite

if name == “main”:

suite = createSuite()

runner = unittest.TextTestRunner(verbosity=2)

runner.run(suite)

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

runner = unittest.TextTestRunner(verbosity=2)

runner.run(suite)

[外链图片转存中…(img-BSMar97p-1719237393469)]
[外链图片转存中…(img-z5W2u2ct-1719237393470)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值