python实现测试工具(二)——简单的ui测试工具


Posted in Python onOctober 19, 2020

本系列教程使用的python版本是3.6.3。

背景

这一节我们实现一个简单的ui测试工具。

该工具的作用是访问某个页面,然后根据css选择器去定位页面上的元素,最后判断页面上元素的个数与我们的预期是否相符。

举一个具体的例子,比如我们去访问www.itest.info这个页面,我们需要判断页面上class = thumbnail-img的元素存在,并且有4个。因为每一个元素代表一门课程,所以这个断言的意思是重定向科技主页上应该有4门主要课程。

视频讲解在这里。

工具设计

我们设计一个命令行工具,给工具传3个参数。

  • 被访问页面的url
  • 页面上元素的css选择器
  • 预期的元素数量,页面上可以存在n个元素,如果传入0,则表示元素不存在,做反向断言

所以工具大概是这样用的: python script_name.py url css_selector length

代码实现

简单起见,我们会用到requests-html库。安装文档在这里。

from requests_html import HTMLSession
from sys import argv
DEBUG = True

USAGE = '''
USAGE:
python html_assertion.py www.itest.info .thumbnail-img 4
'''

if len(argv) != 4:
 print(USAGE)
 exit(1)

script_name, url, css_selector, length = argv

if url[:4] != 'http':
 url = 'http://' + url

session = HTMLSession()
r = session.get(url)

elements = r.html.find(css_selector)


def debug():
 if DEBUG:
  print('*' * 100)
  print(f"css选择器: {css_selector}, 共找到{len(elements)}个元素\n")
  for element in elements:
   print(element.html)
   print(element.attrs)
   print()


if len(elements) != int(length):
 print(f"失败! 预期{length}个元素,实际存在{len(elements)}个元素\n")
 debug()
 exit(1)
else:
 print(f"成功!\n")
 debug()

精讲

用例失败之后使用exit(1)表示异常退出,这样在使用jenkins运行的时候,用例失败jenkins的job结果也会相应失败
requests-html库的基本使用参考这里

运行示例

# 失败情况
python html_assertion.py www.itest.info .thumbnail-img 1
失败! 预期1个元素,实际存在4个元素

****************************************************************************************************
css选择器: .thumbnail-img, 共找到4个元素

<div class="thumbnail-img"><div class="overflow-hidden"><img class="img-responsive" src="/uploads/course/image/7/mission_impossible_cut.jpg"/></div><a class="btn-more hover-effect" href="/courses/7" rel="external nofollow" rel="external nofollow" >更多</a></div>
{'class': ('thumbnail-img',)}

<div class="thumbnail-img"><div class="overflow-hidden"><img class="img-responsive" src="/uploads/course/image/6/120606ineam4nspdc6qdaw.jpg"/></div><a class="btn-more hover-effect" href="/courses/6" rel="external nofollow" rel="external nofollow" >更多</a></div>
{'class': ('thumbnail-img',)}

<div class="thumbnail-img"><div class="overflow-hidden"><img class="img-responsive" src="/uploads/course/image/3/12.jpg"/></div><a class="btn-more hover-effect" href="/courses/3" rel="external nofollow" rel="external nofollow" >更多</a></div>
{'class': ('thumbnail-img',)}

<div class="thumbnail-img"><div class="overflow-hidden"><img class="img-responsive" src="/uploads/course/image/2/13.jpg"/></div><a class="btn-more hover-effect" href="/courses/2" rel="external nofollow" rel="external nofollow" >更多</a></div>
{'class': ('thumbnail-img',)}

# 成功情况
python html_assertion.py www.itest.info .thumbnail-img 4
成功!

****************************************************************************************************
css选择器: .thumbnail-img, 共找到4个元素

<div class="thumbnail-img"><div class="overflow-hidden"><img class="img-responsive" src="/uploads/course/image/7/mission_impossible_cut.jpg"/></div><a class="btn-more hover-effect" href="/courses/7" rel="external nofollow" rel="external nofollow" >更多</a></div>
{'class': ('thumbnail-img',)}

<div class="thumbnail-img"><div class="overflow-hidden"><img class="img-responsive" src="/uploads/course/image/6/120606ineam4nspdc6qdaw.jpg"/></div><a class="btn-more hover-effect" href="/courses/6" rel="external nofollow" rel="external nofollow" >更多</a></div>
{'class': ('thumbnail-img',)}

<div class="thumbnail-img"><div class="overflow-hidden"><img class="img-responsive" src="/uploads/course/image/3/12.jpg"/></div><a class="btn-more hover-effect" href="/courses/3" rel="external nofollow" rel="external nofollow" >更多</a></div>
{'class': ('thumbnail-img',)}

<div class="thumbnail-img"><div class="overflow-hidden"><img class="img-responsive" src="/uploads/course/image/2/13.jpg"/></div><a class="btn-more hover-effect" href="/courses/2" rel="external nofollow" rel="external nofollow" >更多</a></div>
{'class': ('thumbnail-img',)}

动手时间

  • 抄一遍代码,看自己能不能运行起来
  • 给这段代码每一行都加上注释,理解代码做了些什么

扩展阅读

https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors

源码地址

github地址

以上就是python实现测试工具(二)——简单的ui测试工具的详细内容,更多关于python ui测试的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python定时执行之Timer用法示例
May 27 Python
Python 爬虫之超链接 url中含有中文出错及解决办法
Aug 03 Python
python如何求解两数的最大公约数
Sep 27 Python
详解从Django Rest Framework响应中删除空字段
Jan 11 Python
Python制作动态字符图的实例
Jan 27 Python
Python 学习教程之networkx
Apr 15 Python
如何用Python做一个微信机器人自动拉群
Jul 03 Python
Python高级property属性用法实例分析
Nov 19 Python
Django通用类视图实现忘记密码重置密码功能示例
Dec 17 Python
Python同时处理多个异常的方法
Jul 28 Python
Python Opencv图像处理基本操作代码详解
Aug 31 Python
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
Nov 11 Python
python实现测试工具(一)——命令行发送get请求
Oct 19 #Python
基于Python制作一副扑克牌过程详解
Oct 19 #Python
Python实现壁纸下载与轮换
Oct 19 #Python
Python调用REST API接口的几种方式汇总
Oct 19 #Python
Python爬虫抓取论坛关键字过程解析
Oct 19 #Python
python MD5加密的示例
Oct 19 #Python
python Yaml、Json、Dict之间的转化
Oct 19 #Python
You might like
Symfony2联合查询实现方法
2016/03/18 PHP
php基于PDO连接MSSQL示例DEMO
2016/07/13 PHP
Zend Framework常用校验器详解
2016/12/09 PHP
jQuery元素的隐藏与显示实例
2015/01/20 Javascript
jquery插件orbit.js实现图片折叠轮换特效
2015/04/14 Javascript
js格式化时间的方法
2015/12/18 Javascript
AngularJS中的拦截器实例详解
2017/04/07 Javascript
vue实现选项卡及选项卡切换效果
2018/04/24 Javascript
Vue.js的动态组件模板的实现
2018/11/26 Javascript
JavaScript键盘事件常见用法实例分析
2019/01/03 Javascript
JS使用对象的defineProperty进行变量监控操作示例
2019/02/02 Javascript
JavaScript实现单图片上传并预览功能
2019/09/30 Javascript
浅谈关于vue中scss公用的解决方案
2019/12/02 Javascript
[53:15]Mineski vs iG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python语言实现获取主机名根据端口杀死进程
2016/03/31 Python
Python3.5多进程原理与用法实例分析
2019/04/05 Python
基于Python实现人脸自动戴口罩系统
2020/02/06 Python
浅谈keras 的抽象后端(from keras import backend as K)
2020/06/16 Python
Python文件夹批处理操作代码实例
2020/07/21 Python
Python页面加载的等待方式总结
2021/02/28 Python
领先的钻石和订婚戒指零售商:Diamonds-USA
2016/12/11 全球购物
cosme官方海外旗舰店:日本最大化妆品和美容产品的综合口碑网站
2017/01/18 全球购物
日本著名的服饰鞋帽综合类购物网站:MAGASEEK
2019/01/09 全球购物
澳大利亚最超值的自行车之家:Reid Cycles
2019/03/24 全球购物
将一个文本文件的内容按倒序打印出来
2015/01/05 面试题
施惠特软件测试面试题以及笔试题
2015/05/13 面试题
公司综合部的成员自我评价分享
2013/11/05 职场文书
军训自我鉴定200字
2014/02/13 职场文书
收入及婚姻状况证明
2014/11/20 职场文书
中层干部考核评语
2015/01/04 职场文书
观看《筑梦中国》纪录片心得体会
2016/01/18 职场文书
导游词之西江千户苗寨
2019/12/24 职场文书
django如何自定义manage.py管理命令
2021/04/27 Python
Dashboard管理Kubernetes集群与API访问配置
2022/04/01 Servers
苹果可能正在打击不进行更新的 App
2022/04/24 数码科技
python高温预警数据获取实例
2022/07/23 Python