本文主要总结的是pytest中的前置后置怎么返回参数

我们在做自动化的过程中,如果运用的是pytest的话,会遇到怎么使用前置条件中的变量

比如:

@pytest.fixture()
def init_driver():
driver = webdriver.Chrome()
login = LoginPageOperation(driver)
home = HomePageOperation(driver)
driver.get(common_datas.login_url)
driver.maximize_window()
yield
driver.quit()

在这个前置中,我们怎么使用这个driver、login、home呢?

其实我们透过本质来看,这个前置后置本身是一个函数,既然是函数,那么肯定是可以有返回值的,那么问题来了,这个返回值应该在哪里呢?

请看代码:

@pytest.fixture()
def init_driver():
driver = webdriver.Chrome()
login = LoginPageOperation(driver)
home = HomePageOperation(driver)
driver.get(common_datas.login_url)
driver.maximize_window()
yield driver, login, home
driver.quit()

以上标记的地方就是我增加的地方,可以看出这个返回值是跟在yield后面的,而且这个返回值我现在是写的是一个元祖,所有在调用的时候就还能根据索引来调用了,例如:

@pytest.fixture()
def init_driver():
driver = webdriver.Chrome()
login = LoginPageOperation(driver)
home = HomePageOperation(driver)
driver.get(common_datas.login_url)
driver.maximize_window()
yield driver, login, home
driver.quit() class TestLogin: @pytest.mark.usefixtures("init_driver")
def test_success_login(self, init_driver):
"""
登录成功测试用例
"""
init_driver[1].login(test_login_datas.login_success_data["name"], test_login_datas.login_success_data["passwd"])
assert(init_driver[-1].logout_text())

如果这个前置后置继承了其他的前置后置,那么调用被继承的变量该怎么做呢?是不是感觉这个问题很绕,哈哈,看代码吧

@pytest.fixture()
def init():
"""
公共的前置后置
:return: driver, login, home
"""
driver = webdriver.Chrome()
login = LoginPageOperation(driver)
driver.get(common_datas.login_url)
driver.maximize_window()
yield driver, login
driver.quit() @pytest.fixture
def login(init):
home = HomePageOperation(init[0])
yield home, init class TestLogin:从 @pytest.mark.smoke
@pytest.mark.usefixtures("login")
def test_success_login(self, login):
"""
登录成功测试用例
""" login[-1][-1].login(test_login_datas.login_success_data["name"], test_login_datas.login_success_data["passwd"])
assert(login[0].logout_text())

从上面代码可以看出login是继承了init这个函数,然后在我们测试用例中我们是引用了login这个前置后置函数,那么我们在用例中的代码是需要引用init中的driver返回值和login返回值的,所以上面脚本中标记为红色的地方就是我引用init函数里面的login发方法。

透过本质其实可以看出我在login函数里面其实是返回了init的,但是init的返回值其实是有两个的(driver、login),所以我就写成了login[-1][-1]。

pytest中怎么引用前置中的变量的更多相关文章

  1. 深入PHP中的引用

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 简单变量引用 对象引用 函数参数传递 函数返回引用   虽然常说做C/C++编程的程序员转做PHP编程很快可以上手,但是对于 ...

  2. php中引用&的真正理解-变量引用、函数引用、对象引用

    php的引用(就是在变量或者函数.对象等前面加上&符号) //最重要就是 删除引用的变量 ,只是引用的变量访问不了,但是内容并没有销毁 在PHP 中引用的意思是:不同的名字访问同一个变量内容. ...

  3. 内部类访问外部类的变量必须是final吗,java静态方法中不能引用非静态变量,静态方法中不能创建内部类的实例

    内部类访问外部类的变量必须是final吗? 如下: package com.java.concurrent; class A { int i = 3; public void shout() { cl ...

  4. java中使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

    java中使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 是引用对象的地址值不能变,引用变量所指向的对象的内容是可以改变. final变量永远指向这个对象,是一个常量指针,而 ...

  5. C++中的引用

    一,C++中引用的基础知识 1.引用的基本概念 1.所谓的引用其实就是对变量起“别名”.引用和变量对应得是相同的内存,修改引用的值,变量的值也会改变,和指针类似. 2.引用在定义的时候必须要初始化,初 ...

  6. php中关于引用(&)详解

    php中关于引用(&)详解 php的引用(就是在变量或者函数.对象等前面加上&符号) 在PHP 中引用的意思是:不同的变量名访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的 ...

  7. 浅谈Java中的引用

    在Java语言中,引用是指,某一个数据,代表的是另外一块内存的的起始地址,那么我们就称这个数据为引用. 在JVM中,GC回收的大致准则,是认定如果不能从根节点,根据引用的不断传递,最终指向到一块内存区 ...

  8. c++中的引用与指针的区别

    http://blog.csdn.net/lyd_253261362/article/details/4323691 c++中的引用与指针的区别 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存 ...

  9. 理解Java中的引用传递和值传递

    关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题,有论坛说Java中只有值传递,也有些地方说引用传递和值传递都存在,比较容易让人迷惑.关于值传递和引用传递其实需要分情况看待,今天学习 ...

随机推荐

  1. c# WF 第11节 RichTextBox

    本节内容: 1:RichTextBox的简介: 2:实例 1:RichTextBox的简介: 2:实例 实现实例: 1个RichTextBox  2个label  9 个button 步骤一: 步骤2 ...

  2. 201871010111-刘佳华《面向对象程序设计(java)》第十二周学习总结

    201871010111-刘佳华<面向对象程序设计(java)>第十二周学习总结 实验十   集合与GUI初步 实验时间 2019-11-14 第一部分:基础知识总结 第九章知识总结 1. ...

  3. SecureCRT自动断开连接的解决方法

    方法一: 在普通用户下,输入重启sshd服务的命令:service sshd restart 这时会提示:管理系统服务或单元需要身份验证.解决的方法:先要切换为root用户,接着重启sshd服务:se ...

  4. [C7] 支持向量机(Support Vector Machines) (待整理)

    支持向量机(Support Vector Machines) 优化目标(Optimization Objective) 到目前为止,你已经见过一系列不同的学习算法.在监督学习中,许多学习算法的性能都非 ...

  5. java.net 基本测试

    java.net 基本测试 包 java.net java.net.ssl 类 java.net.URL 测试类 package com.mozq.boot.kuayu01.demo; import ...

  6. 【CF280D】k-Maximum Subsequence Sum(大码量多细节线段树)

    点此看题面 大致题意: 给你一个序列,让你支持单点修改以及询问给定区间内选出至多\(k\)个不相交子区间和的最大值. 题意转换 这道题看似很不可做,实际上可以通过一个简单转换让其变可做. 考虑每次选出 ...

  7. x3

    #include<stdio.h> int main() { char ch; printf("输入一个字符:\n"); scanf("%c",&a ...

  8. 9.28 csp-s模拟测试54 x+y+z

    T1 x 求出每个数的质因数,并查集维护因子相同的数,最后看一共有多少个联通块,$ans=2^{cnt}-2$ 但是直接分解会$T$,埃筛是个很好的选择,或者利用每个数最多只会有1个大于$\sqrt{ ...

  9. 数据仓库002 - 复习Linux shell命令 - echo bash_profile bashrc which命令的理解 alias history

    1.echo 打印 . echo 的作用是在屏幕上打印输出内容,与文件和持久化可以理解为没有丝毫关联.如:在屏幕上打印“ echo 的作用是打印文字! ” 实例1:输出系统的环境变量名称 $PATH ...

  10. ​为什么我会选择走 Java 这条路?

    ​本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点 ...