两种常用Selenium测试框架的对比

发表于:2021-3-22 09:21

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:桃子    来源:51Testing软件测试网原创

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

  功能实现用例

  源文件:
  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简单。
  上面仅仅是跑了两条用例,总结一下具体区别如下表:

      版权声明:本文出自51Testing会员投稿,51Testing软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号