千纸鹤

  博客园  ::  :: 新随笔  ::  ::  :: 管理
  5 随笔 :: 70 文章 :: 0 评论 :: 9301 阅读
《一》框架使用共性问题分享
(1)浏览器路径问题
1.通常设置方式: 浏览器路径、配置映射
2.路径存在空格(如:C:\Program Files\Java) 采取策略:path设置环境变量
3.bat文件修改设置
文件内容:C:\Users\zz\AppData\Local\Google\Chrome\Application\chrome.exe --remote-debugging-port=9222
改成这样:chrome.exe --remote-debugging-port=9222
4.切记需要重启pycharm,不然会提示chrome.exe不是内部或外部命令
5.建议不要安装到C盘,否则有文件无权限读取的情况发生
(2)编码问题_编码格式设置:File > File Properties > File Encoding >gbk (点击Convert的转行的按钮)
(3)需要进行预登录:跑自动化之前先手动登录一下
(4)报错信息不用管,用例可以正常执行: 过程试图写入的管道不存在、文件名目录名或卷标语法不正确
(5)启动前需要关闭所有的谷歌浏览器
(6)浏览器driver的传递方式说明
1. 用例层test_case/test_shop_pom_V2.py,引用了fixture browser(fixture的实战应用)
2. 在用例执行前,browser初始化了driver对象
3. 在用例执行时,browser将driver传递给了页面对象GoodsSale
4. GoodsSale继承了父类Login,将browser传递过去
5. 父类Login继承了父类WebKeys,将browser传递过去
6. 在WebKeys类中,构造方法将browser中的drvier进行了实例化
快速理解yield
yield 之前 用例前置
yield xxx 返回信息给用例
yield 之后 用例后置

《二》使用框架编写用例_实现用例:在购物车中选择“相似宝贝”

《三》淘宝电商自动化项目经验分享
(1)搜索商品后,多出登陆步骤的问题
方法1:try: elem = driver.find_element_by_name('...') except: pass
方法2:elems = driver.find_elements_by_name('...') if len(elems)>0: elem = elems[0]
(2)xpath-helper 小工具
若定位到了 results就是正整数; 若没定位到,就显示NULL或者异常
(3)经验分享:在已打开的浏览器上继续运行自动化脚本调试
第一:注释掉打开浏览器的代码,让他不重新打开浏览器 # os.popen("d:/chrome.bat")
第二:把执行完成关闭浏览器的代码关掉 # os.system('taskkill /im chromedriver.exe /F') # os.system('taskkill /im chrome.exe /F')
第三:把已经执行完的步骤注释掉 # 购买商品 # action = GoodsSale(browser) # action.shopping()
第四:如果需要切换窗口,需要特殊处理 首先,在页面上,点击回到第一个窗口 wk.change_window(1) # 调试专用,切换到第二个窗口
第五: 运行main.run,执行需要在新窗口执行的代码

《四》pytest之fixture介绍
Fixtures定义了构成测试准备阶段的步骤和数据,可以通过用修饰器@pytest.fixture来告诉pytest某个特定函数是一个fixture

《五》conftest.py
理论知识
conftest.py是pytest特有的本地测试配置文件,既可以用来设置项目级别的Fixture,也可 以用来导入外部插件,还可以用来指定钩子函数。
conftest.py文件名称是固定的,pytest会自动识别该文件,只作用于它所在的目录及子目录
代码示范
pytest_fixtures父包
<-----by_hand.py----->
# 手写模式
def first_fix():
return ['a']

def test_string(varA):
varA.append('b')
print(varA)

entry = first_fix()
test_string(entry)
输出结果:['a', 'b']

<-----test_quick_example.py----->
import pytest

@pytest.fixture
def first_fix():
return ['a']

def test_string(first_fix):
first_fix.append('b')
print(first_fix)

if __name__ == '__main__':
pytest.main(['-s'])
输出结果:test_quick_example.py ['a', 'b']
.
test_conftest/test_case01.py
开始执行fix1
用例一
.用例二
.用例三
.
结束再执行fix1
<-----test_conftest----->
<-----conftest.py----->
   import pytest

@pytest.fixture(scope='session',autouse=True)
def fix1():
print('\n开始执行fix1')
yield
print('\n结束再执行fix1')
<-----test_case01.py----->
import pytest

def test_case01():
print('用例一')

def test_case02():
print('用例二')

def test_case03():
print('用例三')

if __name__ == '__main__':
pytest.main(['-s'])
输出结果:test_case01.py
开始执行fix1
用例一
.用例二
.用例三
.
结束再执行fix1
posted on   隆江猪脚饭  阅读(93)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示