如何开发测试框架?

基本概念
  •  英文单词叫Library,库是由代码集合成的一个产品,供程序员调用。面向对象的代码组织形成的库叫类库,面向过程的代码组织形成的库叫函数库。

  • 框架 英文单词叫Framework,框架是为解决一个或一类问题而开发的产品,用户一般只需要使用框架提供的类或函数,即可实现全部功能。

  • 工具 英文单词叫Tools,在我看来工具与框架所做的事情类似,只是工具提供了更高层次的封装,屏蔽了底层的代码,提供单独的操作界面供用户操作。例如,UFT(QTP)、Katalon属于自动化测试工具。

常见库

根据上面的概念,Requests是HTTP库,请看官方的简介。

Requests is an elegant and simple HTTP library for Python, built for human beings.

它的使用是这样的:

import requests
r = requests.get('https://api.github.com/events')

那么,其实 Selenium Webdriver也只是一个而已。

from selenium import webdriver
browser = webdriver.Firefox()browser.get('http://www.yahoo.com')

注意:我说的可不是整个Selenium工具,整个Selenium包含:Selenium IDE, Selenium Grid, Selenium Webdriver等。

我们只需要用到库里面的某个类、函数就可完成自己想要实现的功能。

常见框架

再来说说框架, unittest叫单元测试框架,请看官方的简介。

The unittest unit testing framework was originally inspired by JUnit and has a similar flavor as major unit testing frameworks in other languages. It supports test automation, sharing of setup and shutdown code for tests, aggregation of tests into collections, and independence of the tests from the reporting framework.

所以,我们在使用unittest的时候是这样的。

import unittestclass TestStringMethods(unittest.TestCase):def test_upper(self):self.assertEqual('foo'.upper(), 'FOO')if __name__ == '__main__':unittest.main()

这应该是编写的最简单的一条测试用例了。

django叫 Web开发框架,我想你应该也没意见。

mysite/manage.pymysite/__init__.pysettings.pyurls.pywsgi.pypolls/__init__.pyadmin.pyapps.pymigrations/__init__.pymodels.pytests.pyviews.py

这是一个框架的目录结构。那怕我只是想用django在Web页面上展示一行"hello world",那么也要涉及到多个文件的代码编写。

框架的学习和使用成本更高,我们要想使用框架可能需要到它所提供的多个类、函数,而且还要遵循它的代码结构或目录结构。

常见工具

工具很好理解,postman、JMeter、fiddler...这些需要下载安装的一般都叫工具。这不是我们讨论的重点。

一个的框架诞生过程

回到框架的话题上,一般一个框架的诞生过程会经历三个阶段。

学会使用
一般就是看框架的官方文档,首先,安装,然后,拿它来做项目。这一用就是好多年。比如,我用django好几年了,从来没完整的看过它的官方文档了,更别说读用它的源码了。

阅读源码
一般牛B一点,或经验丰富开发,当然不想只局限于框架的使用层面上。他们会花几周,甚至几个月来阅读框架的源码。这样有助于框架使用过程的各种问题的处理和排查。

自研框架
能够自研框架,除了天赋,还要有机遇。比如你们公司对性能有着极高的要求,所有的开源或商业的框架都无法满足你们需求。于是乎走上了自研的道路,分析整个框架性能瓶颈,用更高性能的语言替换关键模块,或更牛B的算法实现关键功能。

阿里的dubbo叫框架,应该没人反对吧?

Apache Dubbo™ is a high-performance, java based open source RPC framework.

自动化测试框架

而我们测试人员口中说的,开发自动化测试框架 大多数情况是:

  • python + unittest + HTMLTestRunner + page objects

  • python + pytest + allure + page objects

开发人员.... ? 这不就是我用:

python + django + pymysql + HTML + CSS + JavaScript 实现一个Web系统

这不是叫"项目开发"么?你只是拿一堆现成的东西整合到了一起,实现了自己的想要的某某功能。这叫 项目开发,不叫 框架开发。

robot framework是框架

robot framework当然是自动化测试框架了。

Robot Framework is a generic open source automation framework for acceptance testing.

为什么它能叫框架?就因为它带个"framework"?当然不是,因为它实现的自动化测试的一整套东西。

  • 如何编写用例
  • 如何组织用例
  • 如何运行测试用例
  • 如何统计用例结果
  • 如何生成测试报告
  • 如何扩展测试库

如果上面这些都是你自己设计和封装的,那么你也可以说自己开发了一个自动化测试框架,明明用着unittest/pytest却说自己开发的自动化测试框架!要么被误导,要么不要脸。

开发框架能教么?

那么问题来了,有人能教你开发测试框架么?

你问大神教你怎么开发一个 前端框架 ? 嗯,他可以给你讲一讲 Vue.js 在项目中的使用 ,或者你是前端开发大牛,你们可以坐一起聊聊 Vue.js 的设计思想。你也可以参与到vue.js 的项目维护当中。

你问 debugtalk 教你怎么开发一个 接口自动化测试框架? 嗯,他可以给你讲一讲 HttpRunner 在项目中的使用技巧 ,如果你有多年的接口测试经验,也可以提一些意见交流交流。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!  

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

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

相关文章

视频剪辑达人分享:批量减片时时长并调整播放倍速的技巧

在视频剪辑中,经常要对多个视频片段进行时长调整和播放倍速的修改。如果一个个手动操作,不仅效率低下,还容易出错。如何快速批量处理这些片段呢?现在一起来看看云炫AI智剪批量减片时长并调整播放的具体步骤。 原视频和剪辑后的视…

Linux系统SSH远程管理服务概述

目录 一.SSH协议 1.定义 2.优点 (1)加密 (2)压缩 3.SSH的客户端与服务端 (1)客户端 (2)服务端 4.原理 5.实验:使用ssh远程登录 二.OpenSSH服务器 1.概念 2.…

CSS3动画效果详解

CSS3动画 在CSS3中,animation属性用于实现元素的动画。 animation属性跟transition属性在功能实现上是非常相似的,都是通过改变元素的属性值来实现动画效果。但是,这两者实际上有着本质的区别 对于transition属性来说,它只能将…

PADS 改变图纸和图页边界大小

PADS 改变图纸和图页边界大小 有时候画一画原理图发现画布不够用了,可改变图纸大小,对应的改变图页边界 若图页边界怎么选择都改变不了,可将途中图页边界删除,重新加载 选择对应的图页边距就好啦 分类: PADS

重学Java 4 进制转换和位运算

天赋不好好使用的话,可是会被收回的哦 ——24.1.13 一、进制转换 1.常用的进制 2.十进制和二进制之间的转换 1.十进制转二进制 辗转相除法——循环除以2,取余数,除到商为0为止,除完后,由下往上,得出换算后…

虚拟主机 如何上传大于100M的文件 php网站程序

问题 虚拟主机上传文件大小限制100m, 有时会遇到非常大的文件上传,上传过程中耗时非常久, 可能服务器的限制设置了上传文件尺寸,返回“413 request entity too large” 整体逻辑 前端:上传文件时,进行文…

C语言——内存函数【memcpy,memmove,memset,memcmp】

📝前言: 在之前的文章C语言——字符函数和字符串函数(一)中我们学习过strcpy和strcat等用来实现字符串赋值和追加的函数,那么除了字符内容,其他的数据(例如整型)能否被复制或者移动呢…

Docker 镜像

1、联合文件系统 UnionFS(联合文件系统):Union文件系统〈UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several dir…

CCF认证+蓝桥杯习题训练

贪心 *上取整公式* *代码展示* #include <iostream> #include <cstring> #include <algorithm>using namespace std;const int N 1e5 10;typedef long long LL;int v[N] , a[N];int main() {int n , d;cin >> n >> d;for(int i 1 ; i < n…

函数式编程 - 组合compose的使用方法

函数式编程中有一个比较重要的概念就是函数组合&#xff08;compose&#xff09;,组合多个函数&#xff0c;同时返回一个新的函数。调用时&#xff0c;组合函数按顺序从右向左执行。右边函数调用后&#xff0c;返回的结果&#xff0c;作为左边函数的参数传入&#xff0c;严格保…

工业级安卓PDA超高频读写器手持掌上电脑,RFID电子标签读写器

掌上电脑&#xff0c;又称为PDA。工业级PDA的特点就是坚固&#xff0c;耐用&#xff0c;可以用在很多环境比较恶劣的地方。 随着技术的不断发展&#xff0c;加快了数字化发展趋势&#xff0c;RFID技术就是RFID射频识别及技术&#xff0c;作为一种新兴的非接触式的自动识别技术&…

python处理目录下文本文件去除空格和空行

一&#xff1a;实现思路&#xff1a; 要想实现去除某个目录下所有txt文件的空格&#xff0c;需要循环遍历一个目录下的所有文件&#xff0c; 获取文件的每行数据去除空格以后&#xff0c;重新保存数据到当前当前文件中。 处理空格,我们使用正则&#xff0c;这样可以去除字符串…

Java并查集设计以及路径压缩实现

Java全能学习面试指南&#xff1a;https://javaxiaobear.cn 并查集是一种树型的数据结构 &#xff0c;并查集可以高效地进行如下操作&#xff1a; 查询元素p和元素q是否属于同一组合并元素p和元素q所在的组 1、并查集的结构 并查集也是一种树型结构&#xff0c;但这棵树跟我们之…

uniapp 如何使用echarts 以及解决tooltip自定义不生效问题

使用的是echarts-for-wx插件&#xff1b; 正常写法案例&#xff1a;给tooltip数值加个% <template><view><uni-ec-canvas class"uni-ec-canvas"id"uni-ec-canvas"ref"canvas"canvas-id"uni-ec-canvas":ec"ec&quo…

【数据库】sql优化有哪些?从query层面和数据库层面分析

目录 归纳sql本身的优化数据库层面的优化 归纳 这类型问题可以称为&#xff1a;Query Optimization&#xff0c;从清华AI4DB的paper list中&#xff0c;该类问题大致可以分为&#xff1a; Query RewriterCardinality EstimationCost EstimationPlan Optimization 从中文的角…

SkipList 的索引过程,能否越两级搜索

“SkipList 的索引过程&#xff0c;能否越两级搜索&#xff1f;” 昨天&#xff0c;一个工作 7 年的粉丝&#xff0c;去某外包公司面试&#xff0c;被问到这个问题不知道该怎么回答。 今天正好有空&#xff0c;给大家分享一下这个问题的回答思路。 对了&#xff0c;这个问题…

ZooKeeper 实战(四) Curator Watch事件监听

文章目录 ZooKeeper 实战(四) Curator Watch事件监听0.前言1.Watch 事件监听概念2.NodeCache2.1.全参构造器参数2.2.代码DEMO2.3.日志输出 3.PathChildrenCache3.1.全参构造器参数3.2.子节点监听时间类型3.2.代码DEMO 4.TreeCache4.1.构造器参数4.2.代码DEMO4.3.日志输出 ZooKe…

Flink(十二)【容错机制】

前言 最近已经放假了&#xff0c;但是一直在忙一个很重要的自己的一个项目&#xff0c;用 JavaFX 和一个大数据组件联合开发一个功能&#xff0c;也算不枉我学了一次 JavaFX&#xff0c;收获很大&#xff0c;JavaFX 它作为一个 GUI 开发语言&#xff0c;本质还是 Java&#xff…

MSF流量加密

1、背景介绍 在MSF中生成shell&#xff0c;并上线运行时。都是通过http https tcp等协议传输。虽然MSF本身会对流量进行加密&#xff0c;但MSF太出名以致于其加密特征容易被IPS&#xff0c;WAF等可以检测带有攻击的特征的设备拦截或记录。 2、生成 SSL 证书 openssl req -x50…

关于运维·关于数据库面试题

目录 一、数据库类型 二、数据库引擎 三、mysql数据库类型 四、mysql的约束添加 五、主从复制原理 六、主从方式有几种 七、mysql主从数据不一致的原因 八、mysql的优化 九、什么是事务的特征 十、数据库读写分离的好处 十一、怎样优化sql语句 十二、mysql的同步方…