自动化测试框架如果都总结成这样,人人都能学好

news2024/10/5 18:22:05

1、自动化测试框架设计的核心,可以概括为解决以下这些问题:

      1)测试数据要怎么准备,如何在框架中实现,是否可复用。

  2)测试用例的批量导入。

  3)用例之间是否存在逻辑关系,相互之间是否有影响,在框架中该如何处理。

  4)测试执行结果的导出和查看。

  5)执行失败的用例如何快速定位复现。

  6)对于UI自动化,当出现异常时(如对象获取不到,无法对对象进行指定操作),框架要如何对应处理,以保证整套用例不会中断执行。

  7)运用多进程和分布式管理的方式,实现在有限时间内完成大批量测试用例的执行。

  8)测试结果的数据统计,生成分析图表。

  您是怎么做的呢?贵公司的UI自动化框架用到了哪些工具?

  因为以上这些问题还是比较发散式的,点题的目的主要也是为了引发大家的思考。

  如果全部具体讲解的话,可能篇幅也会比较长。还是以引导的方式,提供些思考方向给大家吧:

  • 在测试数据准备上,尽量做到数据可复用,便于在集成测试时可循环执行。所以可以把数据的初始化通过在数据库当中用sql语句或存储过程的方式实现,并且可以将此步骤放在自动化测试执行起始或结束处。

  • 如果团队中测试人员们的技术功底较好,可以考虑直接将测试用例存放在数据库中来批量导入,内存读取效率是很高的。其次也可以把测试用例批量导入的载体换为xml或Excel文件。

  • 用例之间如果存在逻辑关系,建议对用例进行分组,使各组用例之间相对独立,执行结果或产生异常也能互不影响。

  • 测试执行结果的导出方式就很多了,结合业务和系统架构场景,怎么方便高效怎么来。查看上做到直观易懂就行。

  • 对于执行失败的用例原因定位,最好能通过在自动化测试脚本中编辑对应的异常输出日志来定位,而不是单纯靠脚本语言自己提供的报错信息。

  • 在UI自动化测试中,对于事先无法预知的异常,可以考虑通过事件触发机制来做判断,然后添加上一些比如关闭弹窗、模拟回车和退出键的操作,使得焦点恢复到主窗体,然后通过测试框架的驱动进入到下一组执行用例中。

  • 目前我有一门主题为《利用Scrapy搭建分布式自动化接口测试框架》课程,讲的就是以http/s接口测试为例,通过多进程、分布式多主机并发的方式来进行自动化测试的。课件已在后期处理中,即将上线,欢迎干兴趣的小伙伴的到时候关注。

  • 测试结果的统计,包含的信息可以有执行时长、总执行用例数、成功/失败执行用例比、失败用例自动retry次数、本轮执行与上轮执行的不同点统计等等。可关注的点还是蛮多的,当然也可以和项目组成员及产品经理多多交流,听听他们想关注的信息。前端动手能力强的,结合图表方式来展示,自然是更好啦!

  期望以上这些信息能对大家的工作有所帮助~

2、一个优秀的自动化测试框架应该具备哪些条件?

  出发点还是要以提高测试效率,扩大用例覆盖范围作为自动化测试的目标。

  另外团队的力量一定是大于个人的。所以如果你的角色是作为测试团队中的测试开发,还要考虑到开发出来的自动化测试框架是否适用于目前团队成员及项目/产品现状,能否帮助他们改进日常的工作。(这里还要考虑到团队的技术基础。必要时对他们输出相应的培训和使用指导)

3、在我们公司测试中,无论测试环境测试还是线上回归,都不可避免的会出现大量的垃圾数据。测试环境还好,可以清空数据库(,但是生产环境无法接触到数据库。这些测试数据一条一条删起来很费力(selenium删或者手动删)。不知道您有什么好方式吗?

  条件允许的话,如果希望测试数据尽可能接近生产环境(这点我也比较赞同),可以考虑把生产库的数据全部或部分拷贝出来,搭建到独立的自动化测试环境中,这样同样也可以避免影响到其他测试同事的数据。

  在测试环境准备上,可以通过vmware或docker容器的方式,相对节省资源。

  再强调一遍,独立的自动化测试环境,在执行上还是很有必要的。这块资源一般公司还是都能有条件提供的吧

4、最近也刚开始接触爬虫测试,开发写好爬虫脚本让我来测试验证,我这边的验证方法主要有两点:(1)运行爬虫脚本观察是否会出现异常,这点主要是通过查看log日志来检查的;(2)检查爬取的数据对不对,这点主要是查看数据库里的数据字段是不是全,是否都有值;不知道这个对不对?

  你的测试方法完全可行,另外建议可以补充几点:

  1、检查下最终的爬取记录总数,看是否存在爬虫执行过程中有丢包。

  2、现在网站实施反爬措施的也日益增多。通常在爬取一段时间后就会被触发,所以需要跟踪观察。

  3、如果遇到反爬的网站,处理机制通常会用到cookie池和ip池两种方式,可以和你的开发小伙伴一起了解下。

5、现在测试框架越来越多,如果来选择自己的测试框架,您这边有什么好的看法吗?

  如今业内大部分公司都会选择开源框架作为主要的自动化测试工具。

  相对于那些商用工具。开源的最大优势(免费呀免费!)在于对于自己公司的业务和测试需求能更好的做二次开发和个性化定制。

  在选择和评估要使用的框架时,我会考虑但不局限于以下几方面:

  1、选择团队大部分成员都熟悉的编程语言,这样可以促使整个团队来对自动化测试进行开发和维护;

  2、如果包含知识传递,比如有业务人员和项目经理等非技术人员的参与,就得考虑框架中测试用例模块的可读性和易懂性,以便协作开发;

  3、测试场景的复杂度,如业务流程和系统界面等因素,对框架的易用性和协作性有哪些要求。对应的开发、管理、维护的投入成本;

  4、框架与被测系统的交互性。尤其在GUI层,确保系统容易被测试,比如给GUI元素增加标识、输出易于解析的文本、提供自动化接口等;

  5、对于版本控制和持续集成的支持;

  之前看过一遍文章,对目前较好的几个测试框架做了介绍,觉得不错,搬运到此分享下:

  1)Robot Framework

  最流行的Python自动化测试框架,可以运行在Java和.NET环境。

  支持跨平台,例如Windows、MacOS和Linux。

  留有API扩展空间,支持表格式的测试数据语法和关键词驱动测试。

  2)RedwoodHQ

  大部分流行的编程语言都可以用来编写测试,例如Java、Python、C#和likewise。

  有一个网站界面,在那里多个测试人员可以在一个平台上协作和运行测试用例。

  有一个内置的IDE,可以在那里创建和修改测试用例,并且并行运行。

  3)Jasmine

  行为驱动开发框架,适用于任何使用JavaScript的地方。

  可被用于Python和Ruby自动化测试。

  可以并行运行客户端测试用例和服务端测试用例。

  4)Pytest

  适用于复杂度较低的小项目。

  提供了测试用例的详细失败信息,可以快速准确地改正问题。

  包含更多功能的插件和多样化的现有测试技术和测试用例,在它的社区有300多个插件可供选择。

  可以将Pytest与诸如Selenium和Splinter之类的图形用户界面一起使用。

6、证券交易柜台这块业务的自动化框架和互联网行业相比,自动化测试框架选型上面能推荐一下么?

  不知道你说的“证券交易柜台”是那种系统架构,C/S or B/S?

  如果是做UI自动化,可选的工具很多,QTP,TestComplete都可以胜任。如果是B/S架构,还可以用selenium自行开发,定制化效果更好。

  如果是接口自动化测试的话,考虑到用的的协议估计不是那些通用协议,比如恒生电子就是自定义开发的交易接口协议,那只有自己开发对应的测试工具了。

7、一个项目中自动化测试是否能有效的展开,自动化测试框架是关键所在是在哪里?

  自动化能否有效的开展,概括的讲可以从“测试用例的覆盖范围”,以及“测试执行效率”这两方面来进行考量,当然还可以加上如“自动化缺陷发现量与总缺陷量的占比”等相关统计数据来综合评估。

  讲的口语化些,就是上了自动化后,产品或项目的测试范围有哪些变化或增量?执行时长比原来缩短了多少?有哪些缺陷是通过自动化测试才发现的?或者说是手工测试较难或难以发现的缺陷。

  举个实际案例:

  有次在调试自动化接口测试时,发现有个api接口在发送请求时,json传参里有很多和实际需求不相关的参数,虽然功能上能正常使用,也就是在做黑盒功能测试时不会觉得有什么问题,但实际上是增加了应用的资源开销。尤其在用户量达到一定量级后,性能上造成的影响就会暴露。于是提交了给开发做了优化。算是在做性能测试前提前排了个雷。

8、我通过android.widget.LinearLayout这个className定位,className是在第三个,就是说instance = 2,d(className("android.widget.LinearLayout").instance(2)).click()有报错,这一块怎么处理呢?

  报错内容是:AttributeError: 'str' object has no attribute 'instance'然后我又改成:

d(className=(("android.widget.LinearLayout").instance(2))).click()也不行

  简约代码:

# com.tencent.mobileqq

import uiautomator2 as u2

from time import sleep

d = u2.connect('192.168.1.129')

d.app_start("com.tencent.mobileqq")

d(text="动态").click()

sleep(4)

d(description = ("点击进入好友动态")).click()

sleep(4)

d(description=("写说说等按钮")).click()

sleep(4)

#??d(className=(("android.widget.LinearLayout").instance(2))).click()

d.text("说说").click()

sleep(4)

d(text="分享新鲜事...").set_text("flyme!")

sleep(4)

d(text="发表").click()

sleep(4)

d(description = ("返回动态 按钮")).click()

sleep(4)

d.app_stop("com.tencent.mobileqq")

  我自己操作试了下。可以用xpath顺利执行。通常首先考虑用id,如果没有id就用xpath。通过这两种属性基本都能定位并操作对应的办法。

  另外为了动态加载等待对象的时间,可以添加个WebDriverWait。比用sleep硬等待时间会更好些。

  参考代码如下(部分):

from appium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

#配置

caps = {'platformName': 'Android', 'deviceName': 'XXXX,'appPackage': 'com.tencent.mobileqq', 'appActivity': 'com.tencent.mobileqq.activity.SplashActivity','XXXX':'XXXX'}

#驱动

driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)

wait = WebDriverWait(driver, 30)

#定位对象并调用方法操作

xpath = u'//android.widget.TextView[@content-desc="说说"]'

shuoshuo = wait.until(EC.presence_of_element_located((By.XPATH, xpath)))

shuoshuo.click()

 


资源分享【这份资料必须领取~】

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/86621.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nginx平滑升级(2022.12.13)

相关视频教程: https://www.bilibili.com/video/BV1BK411W7hn 相关文章: https://blog.csdn.net/u012885136/article/details/122054931 nginx平滑升级 1、旧版本的nginx ps -ef | grep nginx2、解压新版本nginx ,进行编译安装 tar -xvf nginx-1.20.…

Spring使用指南 ~ 5、Spring AOP 使用简介

Spring AOP 使用简介 一、通知(Advice) 公共使用类 Agent.java package com.luo.spring.guides.aop.simple.domain;public class Agent {public void speak() {System.out.println("Bond");} }1、前置通知 package com.luo.spring.guides.…

算法拾遗二十二之Dijstra算法优化+认识一些经典的递归过程

Dijstra算法优化 public static class NodeRecord {public Node node;public int distance;public NodeRecord(Node node, int distance) {this.node node;this.distance distance;}}public static class NodeHeap {private Node[] nodes; // 实际的堆结构// key 某一个node&…

VS2019封装C++接口至可执行动态链接库.dll

VS2019封装C接口至可执行动态链接库.dll 本文主要总结如何对已实现的C函数、类进行封装,以便在其他平台或者语言上进行便捷使用或者二次开发! 重点参考: 1.https://blog.csdn.net/hai_fellow_Z/article/details/117290517 2.https://blog.csd…

打工人的发展困境

近期在公司内部QE社区举办了一场研讨会,主题是《QA角色职业发展机遇讨论》。收集到以下观点,觉得挺有意思,又不局限于特定角色,于是用XX代替QA。 无论是在公司内部还是外部,XX都是单独作战居多,从他人身上…

都在说00后是躺平的一代,公司刚来的00后却把我卷哭了

上个月公司来了许多新面孔,其中居然有一个是00年的,虽然也给公司带来了一些新的血液,但也让我意识到,自己年级确实不小了。这小老弟是去年毕业的,在某软件公司干了半年,现在跳槽到我们公司起薪18K&#xff…

通过数据分析提升客流量和销售额

只有把每一位来光临的顾客都当作最后一位顾客,我们才可能真正实现营销和服务管理的精细化,正如只有把自己的每一天都当作生命的最后一天来对待的人才可能真正珍惜时间和生命一样。 如何提高门店的销售额可以说是大部分店长都十分困惑的问题,…

12月13日 OpenCV 实战基础学习笔记——Harris、SIFT

文章目录前言一、Harris 角点检测1、公式推导2、找到 E(u,v)E(u, v)E(u,v) 的最大值二、SIFT1、关键点定位 keypoint localisation2、特征描述 feature description前言 本文为12月13日 OpenCV 实战基础学习笔记,分为两个章节: Harri 角点检测&#xf…

docker安装Gitlab、修改密码、创建组、创建项目、创建用户、Git拉取代码

安装 建议内存大于2G 开放防火墙端口80和配置映射文件夹 firewall-cmd --zonepublic --add-port80/tcp --permanent firewall-cmd --reload mkdir -p /docker_data/gitlab/{data,logs,config}启动Gitlab容器(启动容器之前确保22,80,443端口没…

图解外包验收流程V2.0及详细说明实例

详细说明 01、【开发计划内容】-标准模板{文档} 1.包含二级模块开发计划,标注里程碑验收节点; 2.包含架构设计、数据库设计输出时间; 3.包含接口开发计划及其接口明细; 4.所有节点分配到具体的人和具体的开始结束时间&#xff1…

Python读取Word文档中的Excel嵌入文件

今天群友提出一个问题: 给出Word示例如下: 对于这种嵌入文件在Word中都属于ole文件。 下面我们假设需要读取每个嵌入的Excel文件中的python工作表中的A1单元格。 python调用宏实现 首先我们看看如何调用com接口的宏代码实现这个效果,最终完…

SpringBoot多模块项目初始化搭建

🎶 文章简介:SpringBoot多模块项目初始化搭建 💡 创作目的:详细介绍SpringBoot多模块项目的搭建 ☀️ 今日天气:阳光明媚 📝 每日一言:不求事事圆满,但求事事甘心。 文章目录1、新建…

数据结构与算法——Java实现单链表、双向链表、环型链表、约瑟夫

目录 一、单链表 1.1 单链表基本介绍 1.2 分析与实现带head头结点的单向链表 1.2.1第一种方式: 尾部添加元素示意图 1.2.2 尾部添加元素的代码实现以及遍历链表的实现 1.2.3 第二种方式: 根据排名将节点插入到指定位置的示意图 1.2.4 根据排名将节…

MySQL入门到精通经典50题,看这一篇就够了

MySQL入门到精通经典50题学习笔记 pdf获取方式,公众号:每天都要努力coding回复:mysql经典50题 文章目录MySQL入门到精通经典50题学习笔记[toc]MySQL安装教程详解数据预览sql建表语句1.查询" 01 “课程比” 02 "课程成绩高的学生的…

基于鸽群算法优化的lssvm回归预测-附代码

基于鸽群算法优化的lssvm回归预测 - 附代码 文章目录基于鸽群算法优化的lssvm回归预测 - 附代码1.数据集2.lssvm模型3.基于鸽群算法优化的LSSVM4.测试结果5.Matlab代码摘要:为了提高最小二乘支持向量机(lssvm)的回归预测准确率,对…

你的项目需要自动化测试吗?看看这篇文章再说吧

什么是自动化测试? 通过代码的方式,实现测试用例的自动运行,评估运行结果,并对测试结果及异常情况进行记录。 为什么进行自动化测试? 纯手工测试会有好多重复性的操作,浪费时间,而且频繁的回…

央企招聘:中国大唐集团2023年度公开招聘公告

中国大唐集团科学技术研究总院有限公司(以下简称科研总院)是世界500强企业——中国大唐集团有限公司(以下简称集团公司)的全资子公司,是集团公司的科技创新中心、战略参谋本部、成果孵化中心、技术服务保障基地和科技人…

Qt+VS+VTK综合开发环境配置

说明 本文旨在介绍一种个人常用的开发环境,主要解决在VS中开发Qt项目的部分问题,以及解决使用基于Qt的VTK库开发时可能遇到的部分问题,并通过合理的配置提升新项目搭建时间 该教程使用版本为VS2017,Qt5.14.2以及VTK8.2&#xff…

git_No.1_版本管控的全流程

文章目录1.获取Git仓库1.1 已存在目录中初始化仓库1.2 克隆一个仓库2. 将变更提交到仓库2.1 查看当前文件状态2.2 跟踪新文件2.3 暂存已修改的文件2.4 忽略文件2.5 查看已暂存和未暂存的修改2.6 提交更新2.7 跳过使用暂存区2.8 移除文件3. 查看提交历史4.远程仓库4.1 查看远程仓…

HTTP介绍

目录 1.什么是HTTP? 2.HTTP的特点 3.HTTP的优点和缺点 4.HTTP请求数据格式 5.HTTP响应数据格式 6.GET请求和POST请求的区别 7.状态码分类说明 8.查看发送的请求数据包方式 1.什么是HTTP? Hyper Text Transfer Protocol,超文本传输协议&#xff…