提供一种思路,解决以下问题:
1、通过RIDE执行测试用例的话,无法调换待执行测试集顺序。
2、无法将当前选择保存为自己的测试集。
鉴于此,需要有方案加以解决。
思路其实也很简单,通过将测试集文件夹、测试集路径加以拼接,利用已有的pybot命令直接执行即可。为了简化操作,可以开发一个界面,读取用例文件夹形成用例树,供使用者手动选择单个或一批用例,拼接形成执行语句。列表可以保存、读取、拷贝到cmd执行,或通过界面直接执行。
以下结合代码,讲解下测试集文件夹形成树状结构的过程:
一、递归形成用例集树
private void createTreeView(string autoPath, TreeNode node) { //先遍历处理文件夹 DirectoryInfo directoryInfo = new DirectoryInfo(autoPath); foreach (DirectoryInfo childDirectoryInfo in directoryInfo.GetDirectories()) { //找到一个子文件夹,定义为一个文件夹节点 TreeNode directoryNode = new TreeNode(childDirectoryInfo.Name.ToString()); //Tag属性里存放路径,路径采取拼接方式形成,顶层路径可直接定义为Root directoryNode.Tag = node.Tag + "/" + childDirectoryInfo.Name.ToString(); directoryNode.ImageIndex = 0; //将此节点往下递归 createTreeView(autoPath + "//" + childDirectoryInfo.Name.ToString(), directoryNode); //将此节点加入到用例树的父节点下 node.Nodes.Add(directoryNode); } //再处理用例集文件,形成叶子 //Py3的用例集默认是.robot格式,所以这里做了筛选 foreach (FileInfo fileInfo in directoryInfo.GetFiles("*.robot")) { //定义一个空叶子节点 TreeNode leafNode = new TreeNode(); //将测试集名称作为叶子节点的名称 leafNode.Text = fileInfo.Name.ToString().Substring(0, fileInfo.Name.ToString().IndexOf(".robot")); //排除系统自动生成的init文件 if (leafNode.Text != "__init__") { //Tag属性里存放路径,路径采取拼接方式形成,直接存放文件名,实际调用会用到 leafNode.Tag = node.Tag + "/" + fileInfo.Name.ToString(); leafNode.ImageIndex = 1; leafNode.SelectedImageIndex = 1; //叶子节点不用再做递归 //将叶子节点添加到父节点上 node.Nodes.Add(leafNode); } } }
二、处理树形结构点击事件:
这里就不展开了,毕竟不同语言各有各的写法。简单说下思路:
1、鼠标单击获取坐标并定位焦点,改变节点“选中”、“未选中”状态。
2、鼠标双击提取节点tag,按叶子节点-测试集名称,非叶子节点-用例集文件夹名称提取。
3、鼠标右键点击节点,按叶子节点-测试集名称,非叶子节点-展开用例集文件夹,逐个用例集名称提取等。
以下是不同的点击效果,均可以正常利用pybot执行。
三、最终形成的执行语句。
即可在界面直接运行,也可以复制到cmd里执行。
以上程序稍加优化,也可以实现多测试机load balance的并发执行。只不过slave上需要开agent向回发送测试结果。
需要获取可执行程序的,可扫码关注公众号或扫码加群获取: