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数据库操作常用功能使用详解(创建表/插入数据/获取数据)
Dec 06 Python
Python实现抓取百度搜索结果页的网站标题信息
Jan 22 Python
Python写的Tkinter程序屏幕居中方法
Mar 10 Python
Python引用类型和值类型的区别与使用解析
Oct 17 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
Apr 16 Python
代码实例讲解python3的编码问题
Jul 08 Python
tensorflow如何批量读取图片
Aug 29 Python
Python imutils 填充图片周边为黑色的实现
Jan 19 Python
基于Tensorflow高阶读写教程
Feb 10 Python
在pycharm中debug 实时查看数据操作(交互式)
Jun 09 Python
python logging 重复写日志问题解决办法详解
Aug 04 Python
python3判断IP地址的方法
Mar 04 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
Terran剧情介绍
2020/03/14 星际争霸
PHP中上传大体积文件时需要的设置
2006/10/09 PHP
用PHP连接MySQL代码的参数说明
2008/06/07 PHP
用Javascript读取中文COOKIE的解决办法
2007/02/15 Javascript
javascript parseInt 函数分析(转)
2009/03/21 Javascript
IE和FireFox(FF)中js和css的不同
2009/04/13 Javascript
js 上传图片预览问题
2010/12/06 Javascript
js中substring和substr的详细介绍与用法
2013/08/29 Javascript
js动态创建上传表单通过iframe模拟Ajax实现无刷新
2014/02/20 Javascript
JQuery表格拖动调整列宽效果(自己动手写的)
2014/09/01 Javascript
基于JS实现textarea中获取动态剩余字数的方法
2016/05/25 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
2017/01/08 Javascript
JS实现课堂随机点名和顺序点名
2017/03/09 Javascript
详解VueJs前后端分离跨域问题
2017/05/24 Javascript
vue实现简单loading进度条
2018/06/06 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
Python字符串中查找子串小技巧
2015/04/10 Python
flask + pymysql操作Mysql数据库的实例
2017/11/13 Python
轻松实现TensorFlow微信跳一跳的AI
2018/01/05 Python
python监控进程脚本
2018/04/12 Python
Appium Python自动化测试之环境搭建的步骤
2019/01/23 Python
Django框架model模型对象验证实现方法分析
2019/10/02 Python
Python+OpenCV图像处理——实现直线检测
2020/10/23 Python
Spartoo英国:欧洲最大的网上鞋店
2016/09/13 全球购物
Three Graces London官网:英国奢侈品牌
2021/03/18 全球购物
PHP如何调用MYSQL存储过程
2014/05/30 面试题
nohup的用法
2012/11/26 面试题
办公室经理岗位职责
2014/01/01 职场文书
高中教师先进事迹材料
2014/08/22 职场文书
优秀大学生事迹材料
2014/12/24 职场文书
初中生毕业评语
2014/12/29 职场文书
检讨书格式范文
2015/05/07 职场文书
结婚堵门保证书
2015/05/08 职场文书
大学生心理健康教育心得体会
2016/01/12 职场文书
教师信息技术学习心得体会
2016/01/21 职场文书