布吉做网站,如何做静态网页,免费设计网站,吉林省高等级公路建设局网站UI自动化测试重点思考--装饰器 装饰器装饰器定义装饰器代码示例装饰器的执行如何将装饰器融合到pytest框架里面 生成器创建生成器生成器的定义如何将生成器融合到pytest框架里面 fixture#xff08;夹具#xff09;使用pytest fixture 中 scope 参数的详细解释 描述符的总结描… UI自动化测试重点思考--装饰器 装饰器装饰器定义装饰器代码示例装饰器的执行如何将装饰器融合到pytest框架里面 生成器创建生成器生成器的定义如何将生成器融合到pytest框架里面 fixture夹具使用pytest fixture 中 scope 参数的详细解释 描述符的总结描述符的定义描述符的作用 ddt数据驱动简单示例升级示例 多线程安装pytest-xdist 插件采用多线程编程 装饰器
装饰器定义 装饰器是一个函数A函数A的传参是函数B且函数A内部还有一个函数C且函数A返回一个函数C函数C是包含函数B的。 装饰器代码示例
def my_decorator(func):def wrapper():print(Something is happening before the function is called.)func()print(Something is happening after the function is called.)return wrappermy_decorator
def say_hello():print(Hello!)say_hello()在这个例子中my_decorator 是一个装饰器函数它接受一个函数作为参数。wrapper 函数是由装饰器内部定义的一个新函数它包裹了原始的 say_hello 函数并添加了额外的功能。当调用 say_hello() 时实际上是调用了 wrapper 函数从而触发了装饰器中定义的操作。 装饰器的执行 当 Python 解释器执行到 my_decorator 时它会立即将被装饰的函数 say_hello 传递给 my_decorator 函数相当于执行了 say_hello my_decorator(say_hello)。在 my_decorator 函数内部它定义了一个内部函数 wrapper该函数包含了在被装饰函数调用前后需要执行的逻辑。当调用 say_hello() 时实际上是调用了 wrapper() 函数因为 say_hello 已经被重新指向了 wrapper 函数。在 wrapper 函数内部首先会执行装饰器定义的前置逻辑然后调用被装饰的函数 func()即调用原始的 say_hello 函数。在调用完被装饰函数后继续执行 wrapper 函数中的后置逻辑。
如何将装饰器融合到pytest框架里面 1.全局管理 driver运行测试用例的时候先调用 driver 传入测试用例中测试用例就可以使用 driver来操作浏览器了。 2.实现执行测试用例之前先登录或者先打开网址执行测试用例之后再自动登出的操作。 生成器
创建生成器
生成器推导式
gen (x ** 2 for x in range(1, 6))含有yield关键字
def squares(n):for i in range(1, n 1):yield i ** 2print(这里被挤出了一个糖)
gensquares(5)定义了一个名为 squares 的函数该函数接受一个整数 n 作为参数。在函数内部使用 yield 语句来生成从 1 到 n 的整数的平方值并在最后打印一条信息 “这里被挤出了一个糖”。 生成器的定义 1.只要是实现了yield关键字的函数都是一个生成器 2.生成器的特点是当调用者执行到yield就会卡住然后把yield后面的参数返回给调用者 3.当接收到next()函数的命令的时候才会执行yield关键字下面的代码 如何将生成器融合到pytest框架里面 1.自动登录登出中要使用生成器 实现了执行测试用例之前先执行前置操作【登录】【因为有装饰器】直到代码运行到有 yield 关键字的时候才会卡住当执行完测试用例之后pytest 自动调用 next 函数才会去执行 yield 关键字后的后置操作【登出】。 fixture夹具使用
pytest fixture 中 scope 参数的详细解释
Scope 参数值描述function每个测试函数都会调用一次 fixture 函数并且在测试函数执行完毕后立即销毁。class在测试类中的所有测试方法之间共享 fixturefixture 在第一个测试方法运行前创建在最后一个测试方法运行后销毁。module在整个测试模块中共享 fixturefixture 在第一个测试函数运行前创建在最后一个测试函数运行后销毁。session在整个 pytest 会话期间共享 fixturefixture 在 pytest 启动时创建在 pytest 结束时销毁。
描述符的总结
描述符的定义 描述符是实现了特定协议的类它至少包含 get()、set() 和 delete() 中的一个方法。 描述符的作用 描述符可以用于控制对类的属性的访问、修改和删除允许你在属性被访问、修改或删除时执行自定义的逻辑。 class PageElement:def __get__(self, instance, owner):print(Getting the value)return instance.__dict__.get(self.attr_name, None)def __set__(self, instance, value):print(Setting the value)instance.__dict__[self.attr_name] valuedef __delete__(self, instance):print(Deleting the value)del instance.__dict__[self.attr_name]class Page:element PageElement()def __init__(self):self.element Nonepropertydef element(self):return self._elementelement.setterdef element(self, value):self._element value# 示例用法
page Page()
page.element Hello # 设置属性值调用 PageElement.__set__()
print(page.element) # 获取属性值调用 PageElement.__get__()
del page.element # 删除属性值调用 PageElement.__delete__()ddt数据驱动
简单示例
import pytest
import timepytest.mark.smoke
pytest.mark.parametrize(username, password, [(user1, DasSWOLd),(user2, pass2),(wzz, 12345)
])
def test_001(self, drivers, username, password):zhufeng ZhuifengIndexPage(drivers)zhufeng.input_account(username)zhufeng.input_password(password)zhufeng.click_login_button()time.sleep(3)pytest.mark.smoke是一个 pytest 的标记用于标记测试用例为 smoke 测试表示这是一个简单的冒烟测试主要验证系统的基本功能。pytest.mark.parametrize(‘username, password’, […])是 pytest 提供的一个装饰器用于为测试用例提供多组参数数据。测试用例 test_001(self, drivers, username, password)这是一个测试方法其参数包括 drivers、usernausername 和 password 是测试数据由 pytest.mark.parametrize 提供。me 和 password。
升级示例
def read_csv_file(file_path):生成器方式去读取csv里面的数据来做数据驱动测试yield关键字来控制一行一行的读取字典里面的内容字典里面的数据是隐形的还未产生就和奶糖盒子一样的道理with open(file_path, r, newline) as file:reader csv.DictReader(file) # 这是一个迭代器对象把每次读取出来的数据都放到字典里面存起来下面用一个for循环一次一次的去读取字典里面的数据确保不会一次性将所有的数据读取到内存中。for row in reader: # 如过下面没有生成器那么这里直接全部数据都遍历一遍如果有生成器就会卡住一个一个来接收到next方法才会读取下一行。yield row[username], row[password]pytest.mark.smoke
pytest.mark.parametrize(username, password, read_csv_file(rdata/data.csv))
def test_001(drivers, username, password):zhufeng zhuifeng_index_page(drivers)zhufeng.input_account usernamezhufeng.input_password password# zhufeng.log_in_button.click()zhufeng.click_log_in_button# assert drivers.current_url https://exam.wzzz.fun1.read_csv_file 函数
这是一个生成器函数用于逐行读取 CSV 文件中的数据。使用 yield 关键字每次从文件中读取一行数据并返回一个包含用户名和密码的元组。
pytest.mark.parametrize(‘username, password’, read_csv_file(r’data/data.csv’))
使用 pytest.mark.parametrize 装饰器标记测试用例并提供了多组用户名和密码的数据源。数据源来自于 read_csv_file 函数返回的生成器通过调用 read_csv_file 函数来读取 CSV文件中的数据并将其作为参数传递给测试用例。 3.def test_001(drivers, username, password):在测试方法中首先创建了一个 zhufeng_index_page 对象然后输入了用户名和密码并点击了登录按钮注释掉的部分这个测试方法会被 pytest.mark.parametrize 多次调用每次调用时传入不同的用户名和密码数据。
多线程
安装pytest-xdist 插件
pip install pytest-xdist采用多线程编程 1、可以使用 threading 线程来指定要并发执行的测试用例但是用例数量一旦多了就不好去人工分配哪一个线程执行那部分用例这时候可以使用插件 pytest-xdist执行 pytest-n5就好了使用多少个线程并发执行还是得看电脑性能如何一般使用10~20 个线程为最佳在自己电脑上就使用5个线程就好了。 2、多线程并发执行用例相当于多个人同时进行测试宏观上是这样的不过微观上对于 cpu 都是串行的只是调度每一个线程的速度非常快看起来是并发的而己因为只有一个cpu同一时刻只能执行一个线程如果有多个cpu 才能真正意义上实现多个测试用例并发执行不过对于测试而言无伤大雅我们了解原理即可我们主要重在使用。
文章转载自: http://www.morning.mhwtq.cn.gov.cn.mhwtq.cn http://www.morning.nd-test.com.gov.cn.nd-test.com http://www.morning.kndt.cn.gov.cn.kndt.cn http://www.morning.xkppj.cn.gov.cn.xkppj.cn http://www.morning.kttbx.cn.gov.cn.kttbx.cn http://www.morning.pqjpw.cn.gov.cn.pqjpw.cn http://www.morning.zbqry.cn.gov.cn.zbqry.cn http://www.morning.stwxr.cn.gov.cn.stwxr.cn http://www.morning.jxltk.cn.gov.cn.jxltk.cn http://www.morning.rfljb.cn.gov.cn.rfljb.cn http://www.morning.wpjst.cn.gov.cn.wpjst.cn http://www.morning.tjsxx.cn.gov.cn.tjsxx.cn http://www.morning.tqbqb.cn.gov.cn.tqbqb.cn http://www.morning.wknjy.cn.gov.cn.wknjy.cn http://www.morning.tfrlj.cn.gov.cn.tfrlj.cn http://www.morning.ddzqx.cn.gov.cn.ddzqx.cn http://www.morning.tnhqr.cn.gov.cn.tnhqr.cn http://www.morning.cpfbg.cn.gov.cn.cpfbg.cn http://www.morning.blxlf.cn.gov.cn.blxlf.cn http://www.morning.qcwrm.cn.gov.cn.qcwrm.cn http://www.morning.kclkb.cn.gov.cn.kclkb.cn http://www.morning.dnvhfh.cn.gov.cn.dnvhfh.cn http://www.morning.msgrq.cn.gov.cn.msgrq.cn http://www.morning.jkdtz.cn.gov.cn.jkdtz.cn http://www.morning.sgmis.com.gov.cn.sgmis.com http://www.morning.lmxzw.cn.gov.cn.lmxzw.cn http://www.morning.dztp.cn.gov.cn.dztp.cn http://www.morning.mkfhx.cn.gov.cn.mkfhx.cn http://www.morning.kjyqr.cn.gov.cn.kjyqr.cn http://www.morning.ie-comm.com.gov.cn.ie-comm.com http://www.morning.lmdkn.cn.gov.cn.lmdkn.cn http://www.morning.ktfbl.cn.gov.cn.ktfbl.cn http://www.morning.tkfnp.cn.gov.cn.tkfnp.cn http://www.morning.frmmp.cn.gov.cn.frmmp.cn http://www.morning.rfldz.cn.gov.cn.rfldz.cn http://www.morning.bnrnb.cn.gov.cn.bnrnb.cn http://www.morning.dnmzl.cn.gov.cn.dnmzl.cn http://www.morning.wsnbg.cn.gov.cn.wsnbg.cn http://www.morning.ssxlt.cn.gov.cn.ssxlt.cn http://www.morning.wdpbq.cn.gov.cn.wdpbq.cn http://www.morning.tyklz.cn.gov.cn.tyklz.cn http://www.morning.txlnd.cn.gov.cn.txlnd.cn http://www.morning.bpwz.cn.gov.cn.bpwz.cn http://www.morning.rmltt.cn.gov.cn.rmltt.cn http://www.morning.mxhcf.cn.gov.cn.mxhcf.cn http://www.morning.ayftwl.cn.gov.cn.ayftwl.cn http://www.morning.jtmrx.cn.gov.cn.jtmrx.cn http://www.morning.fbpyd.cn.gov.cn.fbpyd.cn http://www.morning.tymnr.cn.gov.cn.tymnr.cn http://www.morning.hmfxl.cn.gov.cn.hmfxl.cn http://www.morning.jbshh.cn.gov.cn.jbshh.cn http://www.morning.tpnxj.cn.gov.cn.tpnxj.cn http://www.morning.ftwlay.cn.gov.cn.ftwlay.cn http://www.morning.tbrnl.cn.gov.cn.tbrnl.cn http://www.morning.lmcrc.cn.gov.cn.lmcrc.cn http://www.morning.mytmx.cn.gov.cn.mytmx.cn http://www.morning.plqsz.cn.gov.cn.plqsz.cn http://www.morning.kybjr.cn.gov.cn.kybjr.cn http://www.morning.xdlwm.cn.gov.cn.xdlwm.cn http://www.morning.ncqzb.cn.gov.cn.ncqzb.cn http://www.morning.sqqdy.cn.gov.cn.sqqdy.cn http://www.morning.bqrd.cn.gov.cn.bqrd.cn http://www.morning.mwqbp.cn.gov.cn.mwqbp.cn http://www.morning.tgpgx.cn.gov.cn.tgpgx.cn http://www.morning.mcmpq.cn.gov.cn.mcmpq.cn http://www.morning.xmttd.cn.gov.cn.xmttd.cn http://www.morning.mkygc.cn.gov.cn.mkygc.cn http://www.morning.zsyrk.cn.gov.cn.zsyrk.cn http://www.morning.lwnwl.cn.gov.cn.lwnwl.cn http://www.morning.jqlx.cn.gov.cn.jqlx.cn http://www.morning.lhptg.cn.gov.cn.lhptg.cn http://www.morning.dmkhd.cn.gov.cn.dmkhd.cn http://www.morning.npbnc.cn.gov.cn.npbnc.cn http://www.morning.dmnqh.cn.gov.cn.dmnqh.cn http://www.morning.tqdlk.cn.gov.cn.tqdlk.cn http://www.morning.mbprq.cn.gov.cn.mbprq.cn http://www.morning.krrjb.cn.gov.cn.krrjb.cn http://www.morning.wdhhz.cn.gov.cn.wdhhz.cn http://www.morning.ljllt.cn.gov.cn.ljllt.cn http://www.morning.jjnry.cn.gov.cn.jjnry.cn