selenium+unittest实现web自动化的示例代码

前面我们学习unittest 的目的是用它编写 Web 自动化测试用例,所以接下来会将 unittest 与Selenium 结合起来写一个 Web 自动化测试的例子。

我们仍以百度搜索为例,创建 test_baidu.py 文件

# _*_ coding:utf-8 _*_
"""
name:zhangxingzai
date:2023/2/25
"""

import unittest
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By

class TestBaidu(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Firefox()
        self.baidu_url = 'https://www.baidu.com'

    def test_search_key_unittest(self):
        self.driver.get(self.baidu_url)
        self.driver.find_element(By.ID, 'kw').send_keys('unittest')
        self.driver.find_element(By.ID, 'su').click()
        sleep(2)
        title = self.driver.title
        self.assertEqual(title, 'unittest_百度搜索')

    def test_search_key_selenium(self):
        self.driver.get(self.baidu_url)
        self.driver.find_element(By.ID, 'kw').send_keys('selenium')
        self.driver.find_element(By.ID, 'su').click()
        sleep(2)
        title = self.driver.title
        self.assertEqual(title, 'selenium_百度搜索')

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

if __name__ == '__main__':
    unittest.main

对上面的代码不做过多介绍,都是以 unittest 创建测试类和方法的。方法中的代码是Selenium 脚本。不过,这里的代码存在一些问题,我们来一一改进。

首先,观察代码可以发现,两个测试用例中的步骤是一样的,唯一的区别是搜索的关键字和断言的结果不同。在学习过python模块化,所以这里把操作步骤封装成一个方法。

代码如下:

# _*_ coding:utf-8 _*_
"""
name:zhangxingzai
date:2023/2/25
"""

import unittest
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By

class TestBaidu(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Firefox()
        self.baidu_url = 'https://www.baidu.com'

    # 将百度首页的访问和搜索过程封装成一个baidu_search()方法
    def baidu_search(self, search_key):
        self.driver.get(self.baidu_url)
        self.driver.find_element(By.ID, 'kw').send_keys(search_key)
        self.driver.find_element(By.ID, 'su').click()
        sleep(2)

    def test_search_key_unittest(self):
        search_key = 'unittest'
        self.baidu_search(search_key)
        self.assertEqual(self.driver.title, search_key + '百度搜索')

    def test_search_key_selenium(self):
        search_key = "selenium"
        self.baidu_search(search_key)
        self.assertEqual(self.driver.title, search_key + "百度搜索")

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

if __name__ == '__main__':
    unittest.main

这里将百度首页的访问和搜索过程封装成一个 baidu_search()方法,并定义 search_key参数为搜索关键字,根据接收的关键字执行不同内容的搜索。这里的 baidu_search()方法不会被当作测试用例执行,因为根据 unittest 查找和执行测试用例的规则,它只会把以“test”开头的方法当作测试用例。

另一个值得讨论的问题是,测试用例的断言要不要写在封装的方法中?从前面的代码可以看出,测试的断言点是一样的。这里更倾向于把断言写在每一条测试用例里面。因为很多时候就算操作步骤是一样的,断言点也不完全一样。从设计的角度来看,断言写在每一个测试用例中也会更加清晰。

另外我们还发现每一条测试用例都要启动和关闭一次浏览器,这是非常耗时的,那么如何减少浏览器的启动和关闭次数呢?利用前面学过的setUpClass/tearDownClass可以解决这个问题。

# _*_ coding:utf-8 _*_
"""
name:zhangxingzai
date:2023/2/25
"""

import unittest
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By

class TestBaidu(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Firefox()
        cls.baidu_url = 'https://www.baidu.com'

    def baidu_search(self, search_key):
        self.driver.get(self.baidu_url)
        self.driver.find_element(By.ID, 'kw').send_keys(search_key)
        self.driver.find_element(By.ID, 'su').click()
        sleep(2)

    def test_search_key_unittest(self):
        search_key = 'unittest'
        self.baidu_search(search_key)
        self.assertEqual(self.driver.title, search_key + '_百度搜索')

    def test_search_key_selenium(self):
        search_key = 'selenium'
        self.baidu_search(search_key)
        self.assertEqual(self.driver.title, search_key + '_百度搜索')

    @classmethod
    def tearDownClass(cls):
        cls.driver.close()

if __name__ == '__main__':
    unittest.main

修改前:

修改后:

可以看到修改后省去16秒之多,这里虽然我们将 driver 驱动定义为 cls.driver,但是在每个测试用例中使用时依然为self.driver。

当整个测试类中的所有测试用例都运行完成后,会调用 cls.driver.quit()关闭浏览器。

当一个测试类中有多条测试用例时,这种方式将会大大缩短测试用例的执行时间。

这样我们就得到了一个简单的百度搜索的自动化测试脚本,读者可以根据此例试试别的场景。

到此这篇关于selenium+unittest实现web自动化的示例代码的文章就介绍到这了,更多相关selenium unittest web自动化内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python+selenium的web自动化上传操作的实现

    目录 一.关于上传操作 二.input标签 三.第三方库pywin32 四.第三方工具pyautogui 总结 一.关于上传操作 上传有两种情况: 如果是input可以直接输入路径的,那么直接使用send_keys(文件路径)输入路径即可: 非input标签的上传,则需要借助第三方工具:第三方库 pywin32.第三方工具pyautogui等等. 那这里针对以上两种情况分别介绍一下具体的解决方法. 二.input标签 定位到元素,然后直接使用send_keys(文件路径)输入路径,比较简单. f

  • Python结合Selenium简单实现Web自动化测试

    这篇文章是入门级别的应用Python + Selenium进行自动化测试,包括环境搭建及简单的实例.基本思想是用Firefox Selenium IDE插件录制脚本并生成Python代码,用Python结合Selenium及浏览器驱动程序执行脚本.操作系统是Windows,过程中有不明白的地方记得百度下,比如不知道如何打开Windows CMD命令行.不知道如何设置环境变量等,因为本文的前提是读者已有一定的基础知识. 安装Python,访问其官网www.python.org下载最新版本,建议选择

  • python基于Selenium的web自动化框架

    1 什么是selenium Selenium 是一个基于浏览器的自动化工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.Selenium WebDriver 和Selenium Grid: Selenium IDE:Firefox的一个扩展,它可以进行录制回放,并可以把录制的操作以多种语言(例如java,python等)的形式导出成测试用例. Selenium WebDriver:提供Web自动化所需的API,主要用作浏览

  • 关于Python Selenium自动化导出新版WOS(web of science)检索结果的问题

    selenium 介绍 selenium 是一个 web 的自动化测试工具,不少学习功能自动化的同学开始首选 selenium ,因为它相比 QTP 有诸多有点: 免费,也不用再为破解 QTP 而大伤脑筋 小巧,对于不同的语言它只是一个包而已,而 QTP 需要下载安装1个多 G 的程序. 这也是最重要的一点,不管你以前更熟悉 C. java.ruby.python.或都是 C# ,你都可以通过 selenium 完成自动化测试,而 QTP 只支持 VBS 支持多平台:windows.linux.

  • docker利用selenium+testng实现web自动化的方法

    前言 经历了漫长的各种资料,终于把selenium+testng参数化的问题搞定了!可能网上能找到一些,但是这些都是自己的经历.本文主要介绍了关于docker利用selenium+testng实现web自动化的相关内容,下面话不多说了,来一起看看详细的介绍吧 Windows下selenium+testng的web自动化环境搭建 做过自动化的人,肯定对selenium web环境的搭建非常熟悉了,特别是selenium在java中的使用. 先搭建好安装好JDK,配置好java开发环境(这个如果还是

  • selenium+python自动化测试之使用webdriver操作浏览器的方法

    WebDriver简介 selenium从2.0开始集成了webdriver的API,提供了更简单,更简洁的编程接口.selenium webdriver的目标是提供一个设计良好的面向对象的API,提供了更好的支持进行web-app测试.从这篇博客开始,将学习使用如何使用python调用webdriver框架对浏览器进行一系列的操作 打开浏览器 在selenium+python自动化测试(一)–环境搭建中,运行了一个测试脚本,脚本内容如下: from selenium import webdri

  • selenium+python实现基本自动化测试的示例代码

    安装selenium 打开命令控制符输入:pip install -U selenium 火狐浏览器安装firebug:www.firebug.com,调试所有网站语言,调试功能 Selenium IDE 是嵌入到Firefox 浏览器中的一个插件,实现简单的浏览器操 作的录制与回放功能,IDE 录制的脚本可以可以转换成多种语言,从而帮助我们快速的开发脚本,下载地址:https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/ 如何使用

  • Java Selenium实现多窗口切换的示例代码

    在web应用中,常常会遇见点击某个链接会弹出一个新的窗口,或者是相互关联的web应用 ,这样要去操作新窗口中的元素,就需要主机切换到新窗口进行操作.WebDriver 提供了switchTo().window()方法可以实现在不同的窗口之间切换. 获取当前窗口浏览器句柄:driver.getWindowHandle(); 获取所有窗口的浏览器句柄到当前会话:driver.getWindowHandles(); 用于不同窗口的切换:switchTo().window(); 在页面操作过程中有时候点

  • 基于Docker+Selenium Grid的测试技术应用示例代码

    Selenium Grid介绍 尽管在未来将会推出的Selenium 4.0版本中对Selenium Grid的一些新特性进行了说明,但是目前来看官方并没有太多详细文档供大家参考,所以本书中仍结合目前被广泛使用的Selenium Grid 版本进行讲解. 正如其官网对Selenium Grid的描述,它是一个智能代理服务器,允许Selenium测试将命令路由到远程Web浏览器实例.其目的是提供一种在多台计算机上并行运行测试的简便方法.使用Selenium Grid,一台服务器充当将JSON格式的

  • 详解Nginx如何配置Web服务器的示例代码

    概述 今天主要分享怎么将NGINX配置作为Web服务器,并包括以下部分: 设置虚拟服务器 配置位置 使用变量 返回特定状态码 重写HTTP响应 在高层次上,将NGINX配置作为Web服务器有一些问题需要了解,定义它处理哪些URL以及如何处理这些URL上的资源的HTTP请求. 在较低层次上,配置定义了一组控制对特定域或IP地址的请求的处理的虚拟服务器. 用于HTTP流量的每个虚拟服务器定义了称为位置的特殊配置实例,它们控制特定URI集合的处理. 每个位置定义了自己的映射到此位置的请求发生的情况.

  • python+pywinauto+lackey实现PC端exe自动化的示例代码

    欢迎阅读 最近一年多一直在从事PC端exe的测试,也是趁着闲余时间,调研了下exe的自动化. 核心框架为python+pywinauto+lackey这样的一个组合方式 本文以大家熟知的Tim为例子,实现打开exe,输入账号密码并且登录,搜索具体聊天对象,发送消息,并退出账号的一系列简单操作. 依然是从环境搭建开始,我会尽我所能,详细的去介绍每一步,让各位能看懂我每一步操作的目的和理由.只对代码感兴趣的,跳到文章最后即可. 框架介绍 以python3为基础进行程序设计. pywinauto是基于

  • selenium python 实现基本自动化测试的示例代码

    安装selenium 打开命令控制符输入:pip install -U selenium 火狐浏览器安装firebug:www.firebug.com,调试所有网站语言,调试功能 Selenium IDE 是嵌入到Firefox 浏览器中的一个插件,实现简单的浏览器操 作的录制与回放功能,IDE 录制的脚本可以可以转换成多种语言,从而帮助我们快速的开发脚本,下载地址:https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/ 如何使用

  • shiro无状态web集成的示例代码

    在一些环境中,可能需要把Web应用做成无状态的,即服务器端无状态,就是说服务器端不会存储像会话这种东西,而是每次请求时带上相应的用户名进行登录.如一些REST风格的API,如果不使用OAuth2协议,就可以使用如REST+HMAC认证进行访问.HMAC(Hash-based Message Authentication Code):基于散列的消息认证码,使用一个密钥和一个消息作为输入,生成它们的消息摘要.注意该密钥只有客户端和服务端知道,其他第三方是不知道的.访问时使用该消息摘要进行传播,服务端

  • python+selenium识别验证码并登录的示例代码

    由于工作需要,登录网站需要用到验证码.最初是研究过验证码识别的,但是总是不能获取到我需要的那个验证码.直到这周五,才想起这事来,昨天顺利的解决了. 下面正题: python版本:3.4.3 所需要的代码库:PIL,selenium,tesseract 先上代码: #coding:utf-8 import subprocess from PIL import Image from PIL import ImageOps from selenium import webdriver import t

  • Python Selenium Cookie 绕过验证码实现登录示例代码

    之前介绍过通过cookie 绕过验证码实现登录的方法.这里并不多余,会增加分析和另外一种方法实现登录. 1.思路介绍  1.1.直接看代码,内有详细注释说明 # FileName : Wm_Cookie_Login.py # Author : Adil # DateTime : 2018/3/20 19:47 # SoftWare : PyCharm from selenium import webdriver import time url = 'https://system.address'

随机推荐