文档章节

命令行测试杂谈

go-skyblue
 go-skyblue
发布于 2014/04/30 17:19
字数 803
阅读 94
收藏 2

这篇博客面向的对象

  1. *unix系统
  2. 测试是有一个个的程序组成的。

在百度做测试,测试程序有用python写的,也有是shell写的。还有是用gtest的框架写的。各种各样。 但是用法基本不变,就是运行一个个的测试程序。

这篇文章主要讨论的是如何很好的去运行这一个一个的程序,如何将其很好的组织起来。

如何才叫很好的组织

在此输入图片描述

  1. 运行的程序应该有程序的超时控制。
  2. 程序超时后,由测试程序调用起来的程序应该被全部清理掉
  3. 可以指定运行那些case
  4. 有办法可以重新运行失败的case

这4条是否有异议,有异议请留言。

如何完成这些需要

超时控制

在此输入图片描述

没有超时控制简直就是个灾难,举个例子,有一个测试程序不小心加了个for循环,然后你就等啊等,然后头发突然白了。

超时有很多方法。

python的测试框架py.test有个插件叫timeout. 但是有时不太好使,个人怀疑是python本身的问题。

linux下本身就有个程序叫timeout, 用法也很简单, 比如打算设置个2秒超时

timeout 2s sleep 10

清理策略

在此输入图片描述

程序的清理方法,最重要的一步是标记出哪些程序启动了。 一般有两个思路,先说最简单的这种

启动程序,查看这个程序的pgid(process group id)

在此输入图片描述

网上看到了一个不错的命令,可以通过pid查看pgid

/bin/ps -o pgid -p $pid --no-header

然后使用kill的命令, 注意这个$pgid前面有个负号

/bin/kill -TERM -$pgid

PGID为进程所在的进程组的ID

其实还有一个方法,jenkins在用,就是启动的进程中标记一个环境变量。这样子进程就会继承这个环境变量。 需要清理的时候,首先遍历进程表,然后查找进程中包含该pid的进程。

如何过滤出我们需要的那些case

在此输入图片描述

最好的办法是按照名字去匹配。 比如目录下有3个文件

  • test_openfile.py
  • test_opendir.py
  • base_lib.py

如果想过滤出test开头的,办法可以用个shell脚本搞定了

find -type f | egrep 'test_\.*\.py$' | xargs -i python {}
  1. 有办法可以重新运行失败的case 在此输入图片描述

pytest这个测试框架有个rerunfailed插件。 很不错 https://github.com/klrmn/pytest-rerunfailures 安装方法:

pip install git+https://github.com/klrmn/pytest-rerunfailures.git

如果用shell搞也是有办法的,就是稍微麻烦了点

find -type f | while read name
do
    python $name || echo $name > fails.txt
done

这种方法运行,失败的就记录都fails.txt这个文件里了, 重新运行只要

cat fails.txt | while read name
do
    python $name
done

结束语

终于写完了。 需要注意的地方还是挺多的。 这些需要注意的地方组合在了一起,就成了我现在在用的工具 https://github.com/codeskyblue/travelexec

© 著作权归作者所有

go-skyblue

go-skyblue

粉丝 89
博文 50
码字总数 31921
作品 5
杭州
程序员
私信 提问
我的友情链接

51CTO博客开发 兔样兔森破 王春海的博客 性能测试 Jack zhai 三角阳台的技术笔记本 虚拟化桌面支持 黄锦辉专栏 Citrix、网络工程师 桌面虚拟化杂谈 About:Blank H4cking 月缺 未暖 飞翔的猪 ...

yuanwx0328
2017/11/22
0
0
大型K8s沙龙来啦,火速报名——Kubernetes & Cloud Native Meetup

联合 CNCF 官方出品的 Kubernetes & Cloud Native Meetup 将在 3 月 16 日来到360; 一线大厂的 Kubernetes 集群资源利用率技术首次揭秘,为你带来最权威的容器私有云落地经验 HULK一线技术杂...

ZVAyIVqt0UFji
03/04
0
0
360技术嘉年华第七季——测试之美 报名啦

当当当当!360技术嘉年华第七季,重磅来袭! 本次嘉年华聚焦测试技术,邀请360内外部众多测试专家,畅谈“测试之美”! 活动亮点 多位行业大咖齐聚 本次活动邀请测试领域多位资深测试专家、技...

ZVAyIVqt0UFji
2018/10/17
0
0
Class.forName杂谈

既然是杂谈,那么肯定会比较杂乱,都是点到为止,不回做过多的原理分析,如果对于原理,可能需要深入了解JVM内部的东西了。 首先,我来展示一下几个现象,然后对这几个现象进行分析。 相关几...

Bieber
2014/07/03
1K
2
[经典]跨浏览器兼容测试8大利器

跨浏览器兼容测试8大利器(2010-06-17 18:05:24)转载标签:杂谈分类:网页技巧 仅仅是一年前,跨浏览器兼容测试还不是一件容易事,市面上的测试工具都有一些缺陷,要么太贵,要么功能有限,要...

xcntime
2010/08/11
98
0

没有更多内容

加载失败,请刷新页面

加载更多

MPI(JVM)

jvm安装 yum install -y java-1.8.0-openjdkyum install -y java-1.8.0-openjdk-devel mpi安装 # 编译安装openmpiwget https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4......

赵-猛
17分钟前
6
0
使用递归打印乘法表

一般我们在学for循环的时候都会去打印九九乘法表,但是如果是用递归的方式打印的话,应该怎么做呢? 下面讲解一下用递归打印九九乘法表的思路: 其实我们在用for循环打印乘法表的时候,用的是...

INEVITABLE
56分钟前
13
0
sql 练习

创建需要的4张表 首先创建student、course、score、teacher这四张表。 student表 创建student表 CREATE TABLE IF NOT EXISTS student(sno TINYINT UNSIGNED NOT NULL,sname VARCHAR(20......

Garphy
57分钟前
14
0
vSphere的两种虚拟交换机

VMware vSphere 6.7中支持两种虚拟交换机: 1、标准交换机,VSS - Virtual Standard Switch 2、分布式交换机,VDS - Virtual Distributed Switch VSS与ESXi主机一一对应,即一个VSS只能部署在...

大别阿郎
59分钟前
13
0
webGL和three.js的关系

本文转载于:专业的前端网站➤webGL和three.js的关系 如今浏览器的功能越来越强大,而且这些功能可能通过JavaScript直接调用。你可以用HTML5标签轻松地添加音频和视频,而且可以在HTML5画布上...

前端老手
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部