百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

selenium Python 软件测试框架:关键字驱动开源优化

ccwgpt 2024-10-10 04:53 23 浏览 0 评论

说明

最新的selenium3 python3的开源优化

使用

  • 关注后私信回复框架获取源码

配置yamls下的config的url

url: https://testerhome.com/

命令运行

python runner.py
  • 或者修改start.test.bat中的路径后,直接点击运行

结果展示

日志目录

  • 文件夹:chrome_XXXXX,包含截图

2018-04-29 23:28:09,357 - INFO - ---- test001_登录失败_div.container>ul>li:nth-child(2)_css_click_ ----
2018-04-29 23:28:09,970 - INFO - ---- test001_登录失败_input-lg_class_name_send_keys_lose1 ----
2018-04-29 23:28:10,066 - INFO - ---- test001_登录失败_user_password_id_send_keys_1231231232 ----
2018-04-29 23:28:10,187 - INFO - ---- test001_登录失败_div.form-actions_css_click_ ----
2018-04-29 23:28:10,784 - INFO - ---- test001_登录失败_div.alert-warning_css_ _ ----
2018-04-29 23:28:10,785 - INFO - [CheckPoint_1]: testALoginFail_ : OK
2018-04-29 23:28:36,116 - INFO - ---- test001_登录_div.container>ul>li:nth-child(2)_css_click_ ----
2018-04-29 23:29:41,881 - INFO - ---- test001_登录_input-lg_class_name_send_keys_lose1 ----
2018-04-29 23:30:16,331 - INFO - ---- test001_登录_user_password_id_send_keys_1231231232 ----
2018-04-29 23:30:16,433 - INFO - ---- test001_登录_div.form-actions_css_click_ ----
2018-04-29 23:31:02,425 - INFO - [CheckPoint_2]: testBLogin_==请检查dropdown-avatar==: NG
  • 实时日志

testALoginFail (TestCase.HomeTest.HomeTest) ... ==操作步骤:div.container>ul>li:nth-child(2)_css_click_ ==
==操作步骤:input-lg_class_name_send_keys_lose1==
==操作步骤:user_password_id_send_keys_1231231232==
==操作步骤:div.form-actions_css_click_ ==
==操作步骤:div.alert-warning_css_ _ ==
==用例_登录失败检查点成功==oktestBLogin (TestCase.HomeTest.HomeTest) ... ==操作步骤:div.container>ul>li:nth-child(2)_css_click_ ==
==操作步骤:input-lg_class_name_send_keys_lose==
==操作步骤:user_password_id_send_keys_XXXXX==
==操作步骤:div.form-actions_css_click_ ==
==操作步骤:dropdown-avatar_class_name_click_ ==
==操作步骤://ul[@class='dropdown-menu']/li/a[contains(text(),'lose')]_xpath_ _ ====用例_登录检查点成功==
[{'caseName': 'testALoginFail', 'step': '点击登录\n输入用户名\n输入密码\n点击登录\n', 'info': '打开testerhome', 'title': '登录失败', 'checkStep': '错误的密码登录不成功\n', 'id': 'test001', 'msg': '', 'name': 'chrome', 'result': '通过'}]oktestHotTopic (TestCase.MyTest.MyTest) ... ==操作步骤:div.container>ul>li:nth-child(2)_css_click_ ==
==操作步骤:input-lg_class_name_send_keys_lose==
==操作步骤:user_password_id_send_keys_XXXX==
==操作步骤:div.form-actions_css_click_ ==
==操作步骤:dropdown-avatar_class_name_click_ ==
==操作步骤:dropdown-avatar_class_name_click_ ==
==操作步骤://ul[@class='dropdown-menu']/li/a_xpath_click_ ====操作步骤://ul[@class="list-group"]/li[1]/div/a[2]_xpath_get_text_ ====操作步骤:ul.list-group > li:nth-child(1) > div.title > a:nth-child(2)_css_click_ ==
==操作步骤:/html/head/title_xpath_get_text_ ==
==用例_热门话题检查点成功==

测试报告

代码简要分析

yml测试用例

testinfo:
 - id: test001
 title: 登录
 info: 打开testerhome
testcase:
 - element_info: div.container>ul>li:nth-child(2)
 find_type: css
 operate_type: click
 info: 点击登录
 - element_info: input-lg
 find_type: class_name
 operate_type: send_keys
 msg: lose
 info: 输入用户名
 - element_info: user_password
 find_type: id
 operate_type: send_keys
 msg: XXXXX
 info: 输入密码
 - element_info: div.form-actions
 find_type: css
 operate_type: click
 info: 点击登录
 - element_info: dropdown-avatar
 find_type: class_name
 operate_type: click
 info: 点击图像
check:
 - element_info: //ul[@class='dropdown-menu']/li/a[contains(text(),'lose')]
 find_type: xpath
 check: default_check(默认可以不传,就是简单的查找页面元素)
 info: 查找用户名成功
  • 关于check下面可以填检查点的类型:

  • CONTRARY = "contrary" # 相反检查点,表示如果检查元素存在就说明失败,如删除后,此元素依然存在

  • CONTRARY_GETVAL = "contrary_getval" # 检查点关键字contrary_getval: 相反值检查点,如果对比成功,说明失败

  • DEFAULT_CHECK = "default_check" # 默认检查点,就是查找页面元素

  • COMPARE = "compare" # 历史数据和实际数据对比

某个用例的page层

class LoginPage:
 def __init__(self, kwargs):
 _init = {"driver": kwargs["driver"], "test_msg": getYam(kwargs["path"]), "logTest": kwargs["logTest"], "caseName": kwargs["caseName"]} self.page = Pages.PagesObjects(_init) def operate(self): # 操作步骤
 self.page.operate() def checkPoint(self): # 检查点
 self.page.checkPoint()
  • pages再次封装了一层,主要使用了 setupclass+ self.driver.get重定位的方式

  • 避免用例依赖,并不会每个用例重新启动一个session,重连机制也是这样实现的(后续填坑)

 if kwargs.get("launch", "0") == "0": # 若为空, 刷新页面
 self.driver.get(self.driver.current_url)

testcase层调用page层

cclass HomeTest(ParametrizedTestCase): def testALoginFail(self):
 app = {"logTest": self.logTest, "driver": self.driver, "path": PATH("../Yamls/home/LoginFail.yaml"), "caseName": sys._getframe().f_code.co_name}
 page = LoginFailPage(app)
 page.operate()
 page.checkPoint() def testBLogin(self):
 app = {"logTest": self.logTest, "driver": self.driver, "path": PATH("../Yamls/home/Login.yaml"), "caseName": sys._getframe().f_code.co_name}
 page = LoginPage(app)
 page.operate()
 page.checkPoint()

封装自己的关键字

  • 在BaseOperate中定义自己的关键字

 def operate_by(self, operate, testInfo, logTest):
 ...........
 elements = {
 be.CLICK: lambda: self.click(operate),
 be.GET_VALUE: lambda: self.get_value(operate),
 be.GET_TEXT: lambda: self.get_text(operate),
 be.SEND_KEYS: lambda: self.send_keys(operate),
 be.MOVE_TO_ELEMENT: lambda: self.move_to_element(operate)
 }
  • 在用例中yaml传入自己的关键字即可,看看下面的operate_type中的鼠标悬停

testcase:
 - element_info: cate_item_108698
 find_type: id
 operate_type: move_to_element
 info: 鼠标悬停到.net分类上

后续

  • 引入重连机制

  • docker grid


作者:西边人,西说测试

程序爬虫抓取有用资源共享给大家

头条号、公众号请搜索(软件测试资源站)。

关注后,私信回复【资料包】获取如下内容,

测试资料、工具安装、Python、效率软件、自动化测试报告、梯子、微信群、测试框架 等

微信群、QQ群邀请加入:422703409

相关推荐

NestJS入门教程系列一

介绍Nest(NestJS)是用于构建高效,可扩展的Node.js服务器端应用程序的框架。它使用渐进式JavaScript,内置并完全支持TypeScript(但开发人员仍然能够使用JavaScrip...

【推荐】一个网盘资源搜索与转存工具,支持移动端与PC端!

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!项目介绍CloudSaver是一个基于Vue3和Express的网盘资源搜索与转存开源实用工具。它支持...

Appium原理精讲

目前使用Appium新版本和旧版本的企业数目都很多,而两个版本的安装过程和api的使用又有较大的区别。但是无论表面上的东东如何变化,内部原理都是一样的。在这里我给大家介绍一下appium的核心,增进大...

Kubernetes最小部署单元Pod

一、Kubernetes与Pod简介在当今云计算和容器化技术盛行的时代,Kubernetes已然成为容器编排领域的中流砥柱。它是一个开源的容器编排平台,由Google基于其内部使用的Bo...

最常用的四种跨域解决方案

前置知识什么是跨域?浏览器发送的请求地址(URL)与所在页面的地址不同(端口/协议/域名其一不同)。简言之,浏览器发出的请求url,与其所在页面的url不一样。此时,同源策略会让浏览器拒收服务器...

Bolt.New —— 全栈AI Web自动编程

Bolt.New是由StackBlitz公司推出的,全栈AI工具,代码编辑、运行、部署,通通一站式搞定。它使用WebContainers技术,无需任何本地安装或配置,在浏览器中,就可以运行完整的No...

Nodejs Express新手教程&高手进阶

NodejsExpress新手教程&高手进阶Express是一个NodeJS平台的框架,主要用于构于Web服务器项目。本文将通过示例介绍适合新手入门的Express基础使用,以及高手进阶知识,如:c...

Express.js 创建Node.js Web应用

Express.js是一个基于Node.js的Web应用框架,框架的设计目的是构建应用的架构和简化应用的开发。框架会解决一些通用的问题,在Express.js中,Express框架会处理如:中间件、代...

JavaScript 的 Express.js 功能及应用场景详解

Express.js是一个基于Node.js的轻量级Web应用框架,主要用于快速构建服务器端应用和API。它的核心功能包括以下关键点:1.路由管理URL路径与HTTP方法映射:通过...

nodejs的express4文件下载

在nodejs的express框架中,下载变得非常简单,就一个方法,res.download()首先express命令行生成项目基本框架:不会的看这里:http://blog.csdn.net/zz...

Express 系列:快速生成一个项目

系列预告本系列将以一个项目入手结合相关技术细节来带领大家一起学习Express这个基于Node.js的后端框架。本文首先将介绍:如何快速的生成一个具有一定结构的Express项目。Express项目结...

nodejs的express自动生成项目框架

nodejs版本为:4.X,express版本为4.X1.全局安装2个模块express、express-generator在命令行输入:npminstall-gexpressnpminsta...

express开发(一)简介与搭建

上周末去了趟上海书城,不愧是上海数得上号的书城,流行的科技书应有尽有,话不多说直接上图。最经典的C语言O(∩_∩)O最流行的java(づ ̄3 ̄)づ超酷的R语言/(ㄒoㄒ)/~~然而,身为一个坚定的前...

Vue+Echarts可视化大屏系统后端框架搭建(附代码)

各位同学,大家好。上节课,前面我们讲解了Vue+Echarts前端部分的设计方法。这节课程,我们开始讲解使用Express进行后端设计的方法。01项目相关理论介绍什么是expressExpress是...

Shopify电商API接口开发

Shopify电商API接口开发上线流程主要包括以下步骤。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎洽谈合作。前期准备-注册Shopify账号:在Shopify官网注册,用于后续开发测试...

取消回复欢迎 发表评论: