pytest全局变量的使用详解

 更新时间:2023年11月08日 08:29:42   作者:软件测试果冻  
全局变量是在函数外部定义的变量,所有函数内部都可以使用这个变量,本文就来介绍一下pytest全局变量的使用,感兴趣的可以了解一下

这里重新阐述下PageObject设计模式:

PageObject设计模式是selenium自动化最成熟,最受欢迎的一种模式,这里用pytest同样适用

这里直接提供代码:

全局变量

conftest.py

"""
conftest.py 全局变量,主要实现以下功能:
1、添加命令行参数broswer, 用于切换不用浏览器
2、全局参数driver调用
"""

import pytest
from selenium import webdriver

def pytest_addoption(parser):
    '''
    添加命令行参数 --browser
    '''

    parser.addoption(
        "--browser", action="store", default="firefox", help="browser option: firefox or chrome"
             )

@pytest.fixture(scope='session')   # 以实现多个.py跨文件使用一个session来完成多个用例
def driver(request):
    '''定义全局driver参数'''
    name = request.config.getoption("--browser")
    if name == "firefox":
        driver = webdriver.Firefox()
    elif name == "chrome":
        driver = webdriver.Chrome()
    else:
        driver = webdriver.Chrome()
    print("正在启动浏览器名称: %s" % name)
    # 需要登陆就调用登陆函数

    def fn():
        print("当全部用例执行完之后: teardown driver!")
        driver.quit()
    request.addfinalizer(fn)
    return driver

loginpage.py

'''
作者:Caric_lee
日期:2018
'''
import time

from autoTest.pytest_selenium.common.basepage import BasePage
from autoTest.pytest_selenium.common.logging import Log
from autoTest.pytest_selenium.page.mysql_python import Mysql


# 获取数据库数据
mysql_test = Mysql('localhost','3306','root','123456','test')
dataAll = mysql_test.query('select * from auto_test')
username = dataAll[0]['username']
password = dataAll[0]['password']
url = dataAll[0]['url']
print("查询数据库信息   账号: %s,  密码: %s, url: %s" % (username, password, url))

class Login(BasePage):
    log = Log()

    # 断言登录页,提示文本
    hint_text_element = ('xpath', "//*[@class='crm-login1-header']/h1")
    hint_text = '登录销售易'
    # 断言忘记密码
    forget_paw_elemet = ('xpath', "//*[text()='忘记密码?']")
    forget_paw = '忘记密码'
    # 断言免费注册
    Free_registration_element = ('xpath', "//*[text()='免费注册']")
    Free_registration_text = '免费'
    # 断言'欢迎登录销售易'
    tenant_interface = ('xpath', "//*[text()='欢迎登录销售易']")
    tenant_interface_text = '欢迎登录'
    # 元素定位
    input_username_element = ('xpath', "//*[@name='loginName']")
    input_paw_element = ('xpath', "//*[@placeholder='请输入密码']")
    click_enter_element = ('xpath', "//*[text()='登     录']")
    clikc_tenant_element = ('xpath', "//span[text()='自动化测试_0202_1109_正式' and @class='crm-company-name']")

    def assert_title(self):
        result = self.is_text_in_element(self.hint_text_element, self.hint_text)
        self.log.info("assert: 断言登录页,提示文本: %s" % result)
    def assert_forget_paw(self):
        result = self.is_text_in_element(self.forget_paw_elemet, self.forget_paw)
        self.log.info("assert: 断言忘记密码: %s" % result)
    def assert_Free_registration(self):
        result = self.is_text_in_element(self.Free_registration_element, self.Free_registration_text)
        self.log.info("assert: 断言免费注册: %s" % result)
    def input_username(self, username):
        self.send_keys(self.input_username_element, username)
    def input_paw(self, paw):
        self.send_keys(self.input_paw_element, paw)
    def click_enter(self):
        self.click(self.click_enter_element)
    def assert_tenant_interface(self):
        result = self.is_text_in_element(self.tenant_interface, self.tenant_interface_text)
        self.log.info("assert: 欢迎登录销售易: %s" % result)
    def move_scroll_end(self):
        time.sleep(3)
        self.js_focus_element(self.clikc_tenant_element) # 这里已经可以实现滚动了
        self.log.info("聚焦滚动结束!")

    def click_tenant(self):  # 选择租户
        self.click(self.clikc_tenant_element)
        self.log.info("选择租户成功!")

    def login(self, username=username, paw=password):
        '''登录流程'''
        self.assert_title()     # 断言登录页,提示文本
        self.assert_forget_paw()    # 断言忘记密码
        self.assert_Free_registration() # 断言免费注册
        self.input_username(username)
        self.input_paw(paw)
        self.click_enter()
        time.sleep(3)
        self.assert_tenant_interface()  # 断言'欢迎登录销售易'
        print("---------------------->>>>>>>>>>>>>")
        self.move_scroll_end()
        self.click_tenant()

if __name__=='__main__':
    from selenium import webdriver
    driver = webdriver.Chrome()
    base = Login(driver)
    driver.get(url)
    driver.maximize_window()
    driver.implicitly_wait(10)
    base.login()

    # 学习备注!
    # 调试某个功能的时候,就只写这个功能点的代码去调
    # 加载转圈是js报错了,前端的问题,是bug  (滚动条)

test_login.py

'''
作者:Caric_lee
日期:2018
'''
from autoTest.pytest_selenium.page import loginpage
from autoTest.pytest_selenium.page.loginpage import Login
import pytest, time


class Test_login():
    url = loginpage.url
    username_data = loginpage.username
    paw_data = loginpage.password
    print("调用信息   账号: %s,  密码: %s, url: %s" % (username_data, paw_data, url))

    @pytest.fixture(scope="function",  autouse=True)   # function 默认参数传递,autouse=True 自动调用fixture功能
    def test_01(self, driver):
        driver.get(self.url)
        driver.maximize_window()
        driver.implicitly_wait(10)
        self.login = Login(driver)

    def test_02(self):
        '''登录'''
        # 1、断言登录页,提示文本
        self.login.assert_title()
        # 2、断言忘记密码
        self.login.assert_forget_paw()
        # 3、断言免费注册
        self.login.assert_Free_registration()
        # 4、输入账号
        self.login.input_username(self.username_data)
        # 5、输入密码
        self.login.input_paw(self.paw_data)
        # 6、点击登录
        self.login.click_enter()
        time.sleep(3)
        # 7、断言'欢迎登录销售易'
        self.login.assert_tenant_interface()
        # 8、滚动到底部
        self.login.move_scroll_end()
        # 9、点击租户
        self.login.click_tenant()
        time.sleep(5)

    def test_03(self, driver):
        time.sleep(5)
        driver.quit()

if __name__ == '__main__':
    # 选择测试浏览器
    pytest.main(["-s", "--browser=chrome", "test_login.py"])

这里直接指向test_login.py文件就OK了,

还可以在优化,把loginpage中的读取数据库信息,单独写个方法,放在page里面,直接读取。

数据结构还需要在调整

到此这篇关于pytest全局变量的使用详解的文章就介绍到这了,更多相关pytest全局变量 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python字符串操作实战之如何提取子字符串

    Python字符串操作实战之如何提取子字符串

    这篇文章主要给大家介绍了关于Python字符串操作实战之如何提取子字符串的相关资料,字符串是Python中最常用的数据类型,大家应该都不陌生,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • Python数据可视化之简单折线图的绘制

    Python数据可视化之简单折线图的绘制

    这篇文章主要为大家详细介绍了Python数据可视化之绘制简单折线图的相关资料,文中的示例代码简洁易懂,感兴趣的小伙伴可以了解一下
    2022-10-10
  • Python restful框架接口开发实现

    Python restful框架接口开发实现

    这篇文章主要介绍了Python restful框架接口开发实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Python Pingouin数据统计分析技术探索

    Python Pingouin数据统计分析技术探索

    Pingouin库基于pandas、scipy和statsmodels,为用户提供了执行常见统计分析的功能,它支持各种统计方法和假设检验,例如 t-tests、ANOVA、correlation analysis 等,本文通过一些示例代码,以更全面地了解如何使用Pingouin库进行统计分析,
    2024-01-01
  • pytorch tensor按广播赋值scatter_函数的用法

    pytorch tensor按广播赋值scatter_函数的用法

    这篇文章主要介绍了pytorch tensor按广播赋值scatter_函数的用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Python处理和解析CLIXML数据的方法

    Python处理和解析CLIXML数据的方法

    在使用Windows的Windows Remote Management (WinRM)服务与PowerShell交互时,经常会遇到CLIXML(即CLI XML)格式的数据,本文将介绍如何在Python中处理和解析CLIXML数据,并提供一种方法来从数据中提取有效信息,需要的朋友可以参考下
    2024-04-04
  • python+selenium 脚本实现每天自动登记的思路详解

    python+selenium 脚本实现每天自动登记的思路详解

    这篇文章主要介绍了python+selenium 脚本实现每天自动登记,本文你给大家分享基本的思路,通过实例代码截图的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • 两行代码解决Jupyter Notebook中文不能显示的问题

    两行代码解决Jupyter Notebook中文不能显示的问题

    这篇文章主要介绍了两行代码解决Jupyter Notebook中文不能显示的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Python 中 key 参数的含义及用法小结

    Python 中 key 参数的含义及用法小结

    我们在使用 sorted() 或 map() 函数的时候,都会看到里面有一个 key 参数,其实这个 key 参数也存在于其他内置函数中(例如 min()、max() 等),那么我们今天就来了解一下 key 参数的含义以及用途吧,需要的朋友可以参考下
    2023-12-12
  • python raise的基本使用

    python raise的基本使用

    这篇文章主要介绍了python raise的基本使用,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-09-09

最新评论