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发送伪造的arp请求
Jan 09 Python
详解Python在七牛云平台的应用(一)
Dec 05 Python
Django中使用celery完成异步任务的示例代码
Jan 23 Python
Ubuntu下使用python读取doc和docx文档的内容方法
May 08 Python
用Python将一个列表分割成小列表的实例讲解
Jul 02 Python
python 通过麦克风录音 生成wav文件的方法
Jan 09 Python
python实现狄克斯特拉算法
Jan 17 Python
python3中类的继承以及self和super的区别详解
Jun 26 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
Aug 14 Python
python-tornado的接口用swagger进行包装的实例
Aug 29 Python
selenium+超级鹰实现模拟登录12306
Jan 24 Python
Django路由层如何获取正确的url
Jul 15 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
php变量作用域的深入解析
2013/06/03 PHP
使用php伪造referer的方法 利用referer防止图片盗链
2014/01/20 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
2016/07/08 PHP
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
2013/06/28 Javascript
window.location.href中url中数据量太大时的解决方法
2013/12/23 Javascript
javascript实现点击商品列表checkbox实时统计金额的方法
2015/05/15 Javascript
JS实现可拖曳、可关闭的弹窗效果
2015/09/26 Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
2015/12/10 Javascript
JavaScript用JSONP跨域请求数据实例详解
2017/01/06 Javascript
用 js 的 selection range 操作选择区域内容和图片
2017/04/18 Javascript
Vuex之理解Getters的用法实例
2017/04/19 Javascript
详解Web使用webpack构建前端项目
2017/09/23 Javascript
jQuery md5加密插件jQuery.md5.js用法示例
2018/08/24 jQuery
Javascript实现鼠标点击冒泡特效
2019/12/24 Javascript
[01:30:54]《加油DOTA》 第三期
2014/08/18 DOTA
python批量制作雷达图的实现方法
2016/07/26 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
2019/07/12 Python
六种酷炫Python运行进度条效果的实现代码
2020/07/17 Python
Python requests接口测试实现代码
2020/09/08 Python
CSS3教程:新增加的结构伪类
2009/04/02 HTML / CSS
台湾百利市购物中心:e-Payless
2017/08/16 全球购物
static关键字的用法
2013/10/07 面试题
Linux开机引导的步骤是什么
2015/10/19 面试题
考博专家推荐信模板
2013/12/02 职场文书
入党自我评价优缺点
2014/01/25 职场文书
医院总经理岗位职责
2014/02/04 职场文书
高中军训感言500字
2014/02/24 职场文书
2014年清明节寄语
2014/04/03 职场文书
专家推荐信模板
2014/05/09 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
延安红色之旅心得体会
2014/10/07 职场文书
初中作文评语
2014/12/25 职场文书
绵山导游词
2015/02/05 职场文书
小学四年级班主任工作经验交流材料
2015/11/02 职场文书
MySQL创建高性能索引的全步骤
2021/05/02 MySQL