• 13
  • 13
分享

  前言

  在使用Selenium过程中,目前比较流行的两种框架分别是Unittest和Pytest,之前一直使用Unittest框架,在查阅一些资料的时候发现大部分人在使用Pytest框架,心中不免产生疑惑这两种框架具体区别在什么地方呢,于是花半天时间整理一下具体的区别。

  下面以某软件登录功能为例查看一下具体区别:

1-1.png

  功能实现用例

1-2.png

  源文件:

  1.login.py

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from  time import sleep
from selenium import webdriver
class TestUserLogin(object):
    def __init__(self):
        self.driver=webdriver.Chrome()
        self.driver.get('http://localhost:8888/jpress/user/login')
        self.driver.maximize_window()
    #登录失败-用户名、密码错误
    def test_user_logon_username_error(self):
        username=''
        pwd='123456'
        expected='账号不能为空'
        self.driver.find_element_by_name('user').send_keys(username)
        self.driver.find_element_by_name('pwd').send_keys(pwd)
        self.driver.find_element_by_class_name('btn').click()
#显示等待弹窗出现
        WebDriverWait(self.driver,5).until(EC.alert_is_present())
        alert=self.driver.switch_to.alert
        sleep(3)
        assert alert.text==expected
        alert.accept()
        #self.driver.quit()
#登录成功
    def test_user_logon_username_pass(self):
        username='wx1'
        pwd='123456'
        expected='用户中心'
        self.driver.find_element_by_name('user').send_keys(username)
        self.driver.find_element_by_name('pwd').clear()
        self.driver.find_element_by_name('pwd').send_keys(pwd)
        self.driver.find_element_by_class_name('btn').click()
        WebDriverWait(self.driver,5).until(EC.title_is(expected))
        sleep(3)
        assert self.driver.title==expected
        self.driver.quit()

   

  2.main.py

from test_user_login import *
if __name__ == '__main__':
    case=TestUserLogin()
    case.test_user_logon_username_error()
    case.test_user_logon_username_pass()

   

  用例重构

  1.unnitest

  步骤:

  –拷贝之前写好的用例

  –更改继承类为unnitest.Testcase

  –修改init方法为setup

  –assert断言改为unittest断言

  –关闭浏览器teardown

  注意:清空数据、测试添加序号

  代码:

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from  time import sleep
import unittest
from selenium import webdriver
class TestUserLogin(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.driver=webdriver.Chrome()
        cls.driver.get('http://localhost:8888/jpress/user/login')
        cls.driver.maximize_window()
    # def __init__(self):
    #     self.driver=webdriver.Chrome()
    #     self.driver.get('http://localhost:8888/jpress/user/login')
    #     self.driver.maximize_window()
    #用户名、密码错误
    def test_user_logon_username_error(self):
        username=''
        pwd='123456'
        expected='账号不能为空'
        self.driver.find_element_by_name('user').send_keys(username)
        self.driver.find_element_by_name('pwd').send_keys(pwd)
        self.driver.find_element_by_class_name('btn').click()
        WebDriverWait(self.driver,5).until(EC.alert_is_present())
        alert=self.driver.switch_to.alert
        sleep(3)
        #assert alert.text==expected
        self.assertEqual(alert.text,expected)
        alert.accept()
        #self.driver.quit()
    def test_user_logon_username_pass(self):
        username='wx1'
        pwd='123456'
        expected='用户中心'
        self.driver.find_element_by_name('user').send_keys(username)
        self.driver.find_element_by_name('pwd').clear()
        self.driver.find_element_by_name('pwd').send_keys(pwd)
        self.driver.find_element_by_class_name('btn').click()
        WebDriverWait(self.driver,5).until(EC.title_is(expected))
        sleep(3)
        assert self.driver.title==expected
        self.driver.quit()
if __name__ == '__main__':
    unittest.main()

   

  2.pytest

  重构过程

  步骤:

  –修改继承类为object

  –修改pytest setup方法:setup_class

  –修改python断言assert

  –使用pytest插件

  –pip install pytest-dependency

  代码:

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from  time import sleep
from selenium import webdriver
import pytest
class TestUserLogin(object):
    def setup_class(self):
        self.driver=webdriver.Chrome()
        self.driver.get('http://localhost:8888/jpress/user/login')
        self.driver.maximize_window()
    #用户名、密码错误
    def test_user_logon_username_error(self):
        username=''
        pwd='123456'
        expected='账号不能为空'
        self.driver.find_element_by_name('user').send_keys(username)
        self.driver.find_element_by_name('pwd').send_keys(pwd)
        self.driver.find_element_by_class_name('btn').click()
        WebDriverWait(self.driver,5).until(EC.alert_is_present())
        alert=self.driver.switch_to.alert
        sleep(3)
        assert alert.text==expected
        alert.accept()
        #self.driver.quit()
    def test_user_logon_username_pass(self):
        username='wx1'
        pwd='123456'
        expected='用户中心'
        self.driver.find_element_by_name('user').send_keys(username)
        self.driver.find_element_by_name('pwd').clear()
        self.driver.find_element_by_name('pwd').send_keys(pwd)
        self.driver.find_element_by_class_name('btn').click()
        WebDriverWait(self.driver,5).until(EC.title_is(expected))
        sleep(3)
        assert self.driver.title==expected
        self.driver.quit()
if __name__ == '__main__':
    pytest.main()

   

  运行完上面的代码之后我们可以发现,从初级脚本到pytest改写只需要修改pytest setup方法为setup_class(),如果需要函数依赖再安装一个dependency插件即可,较unittest简单。

  上面仅仅是跑了两条用例,总结一下具体区别如下表:

1-3.png


作者:桃子   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 新浪科技讯北京时间11月14日上午消息,据报道,多年来科技巨头们一直支撑着美国股市,它们的股价连连创下新高,但是2022年美国股市突然不行了,于是科技巨头也就没有那么风光了。尽管上周美国股市出现反弹,今年苹果、微软、亚马逊、谷歌母公司Alphabet、Meta的市值总和还是损失了超3万亿美元。这主要是因为营收增速放缓,利率上升。2020年9月5家公司的市值在标普500指数中占比达到24%,创历史新高,现在降到了19%。美联储退出宽松政策,股市已经发生了很大的变化。就在科技企业影响力退潮时,传统行业却在前进,能源和银行等行业在标普500指数中占据了更大的份额,埃克森美孚和富国银行都因为高油价或者...
            0 0 902
            分享
          • 一. 我们没有已经部署的环境,其他团队会做这件事情你星期一早上来办公室。您注意到生成拦截器有几个问题。您需要从构建存储库构建新版本。您提出请求或联系您的开发团队或部署团队。哦,他们都在忙些其他的事情。但他们在一段时间后就可以做到了。现在告诉我,为什么会这样?它并不像看上去那么复杂。当采取新的构建时,开发人员肯定肯定可以修复好。但是,当您只需触发并部署它时,为什么要等待或依赖某个人呢?有能力和权限随时部署,使您的工作更容易,没有任何等待。你看到了吗?它也会增加你每天测试的周转时间。尽管它正在使用添加的记录器调试某些缺陷,或者使用新的构建来验证已解决的错误。或者是进行新的构建并开始测试新...
            0 0 900
            分享
          •   Selenium WebDriver让我们轻松实现与浏览器的交互,通过页面元素定位,执行对应的元素操作及断言设置,这一系列的步骤开启了Web自动化脚本的创建。相信大家对于元素定位及其执行并不陌生,今天我们就来聊一聊Selenium WebDriver中另一大特色JS语句的执行,即JavaScriptExecutor。  1.什么是JavaScriptExecutor  JavaScriptExecutor 是Selenium WebDriver提供的一个接口,它提供了一种通过WebDriver直接执行JavaScript的方式,在选定窗口或当前页面上运行 JavaScript 的...
            13 13 2870
            分享
          • 软件测试概念:一、什么是软件测试?1、软件测试是指使用人工或者自动手段,来运行或测试某个系统的过程。其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。二、一般的软件测试的应用场景有:APP、代码、WEB和小程序。三、软件测试的发展历程:软件测试从开始到现在,已经经历了三个阶段的发展,到现在正式第三阶段到第四阶段的过渡期;第一阶段:定义的软件测试,是去证明软件是正确的。在这种情况下,导致了很多异常的情况根本无法被发现,软件的质量都比较差,不稳定,很容易出问题;第二阶段:软件测试是去证明软件是错误的。软件测试就是去找软件存在的问题,虽然现在软件测试已经发展到第三阶段很久了,但是...
            0 0 691
            分享
          •   网关是指内部服务和第三方外部服务交互的接口,常见的网关有通过渠道引入外部用户的通用网关、和支付商户对接的支付网关、获取第三方数据的数据网关等(一种是我们提供给第三方调用,一种是去调用第三方,这里重点讨论第二种)。  因为网关接口需要依赖第三方响应的结果,而不管我们请求参数如何,第三方测试环境响应结果基本固定,不一定会出现我们想要的情况。  还有一种情况是测试账号的原因,比如缺少有效的信用卡号、有流水记录的淘宝卖家账号等,导致我们使用的测试账号只能覆盖单一的情况。  虽然对网关来说大部分时候只要能和第三方调通就可以,但是线上情况不可控,只验证正常情况当然不够严谨,需要确保各种可能出现的异常情...
            0 0 963
            分享
      • 51testing软件测试圈微信