图像相似度算法的一点粗糙应用——GUI测试
2009-05-19 22:06
393 查看
因为一些私人的事情,本来早已经应该完成的一篇文章一直到今天才可以草草了结。在前面的两篇文章《图像相似度算法的C#实现及测评》《对“画条线”(Draw a line)的单元测试几点想法和实践 》中,先后介绍了一个简单的会读直方图算法和一些关于GUI画图的测试想法。有必要说明的是,在《对“画条线”(Draw a line)的单元测试几点想法和实践》中提到的几种方法,最实用的是Mock法并不是今天的主题。
这篇文章中继续前面的思路,简单写写有关GUI自动化测试的一点想法。
问题
对于画线,画图等应用程序的功能自动化测试的解决方案?
解决思路
采取截图法,即将用例中的输出截图,以图片作为输出结果,当然之前需要一个相应的图片作为预期结果,以便于比较。
对于预期结果图片,可以采用的方式是先运行一次自动化测试代码截得一幅图片,然后手动检查图片是否为与其效果,如是则将该图片作为预期结果。(在功能自动化测试中,在第一次运行自动化测试脚本的时候,是应该在人工监视的条件下进行的,而更多时候在我们调试相应的脚本的时候就已经完成了相应的工作。)
示例代码
1,待测代码示例
Main
static void Main(string[] args)
{
//启动待测窗口
Draw_A_Line ad = new Draw_A_Line();
Console.WriteLine("After the AUT loaded, Try to close it manually.");
System.Windows.Forms.Application.Run(ad);
/*************************
* 当窗口弹出后,手动关闭窗口
***************************/
//比较预期输出和实际输出
ImageComparator com = new ImageComparator(@"C:\Test\Test.jpg", @"C:\Test.jpg");
if (com.IsSame)
Console.WriteLine("Haha, the two is the same~~");
Console.ReadKey();
}
方法改进和总结
我们可以看到这个方法存在着很多缺陷,这也是为什么我的标题中加入了“粗糙”的缘故:
1, 部分代码植入到了源代码中,如我们在源代码中重写了Dispose方法,加入了对于保存图像的调用相关代码,也加入了保存图像的方法到应用程序中。
当然,这一点我们可以通过重构以解决,把保存图片的代码抽离这个应该不会太让人纠结。把调用从Dispose方法中抽离出来,目前我的想法是使用多线程,一个线程用来运行待测程序,另外一个线程则用来截图。简单的多线程操作可以参见我的另外一篇介绍文章《Winform自动化测试解决对话框问题(多线程)》。
2,截图方法使用了Windows API,我们应该使用其他更为合适的方法。
3,上面的示例代码只是为了说明一个大体思路,并不能作为一个完整的解决方案。不过笔者会利用业余时间尽快实现一个具有实践意义的解决方案。
完整示例代码下载
示例代码下载
这篇文章中继续前面的思路,简单写写有关GUI自动化测试的一点想法。
问题
对于画线,画图等应用程序的功能自动化测试的解决方案?
解决思路
采取截图法,即将用例中的输出截图,以图片作为输出结果,当然之前需要一个相应的图片作为预期结果,以便于比较。
对于预期结果图片,可以采用的方式是先运行一次自动化测试代码截得一幅图片,然后手动检查图片是否为与其效果,如是则将该图片作为预期结果。(在功能自动化测试中,在第一次运行自动化测试脚本的时候,是应该在人工监视的条件下进行的,而更多时候在我们调试相应的脚本的时候就已经完成了相应的工作。)
示例代码
1,待测代码示例
Main
static void Main(string[] args)
{
//启动待测窗口
Draw_A_Line ad = new Draw_A_Line();
Console.WriteLine("After the AUT loaded, Try to close it manually.");
System.Windows.Forms.Application.Run(ad);
/*************************
* 当窗口弹出后,手动关闭窗口
***************************/
//比较预期输出和实际输出
ImageComparator com = new ImageComparator(@"C:\Test\Test.jpg", @"C:\Test.jpg");
if (com.IsSame)
Console.WriteLine("Haha, the two is the same~~");
Console.ReadKey();
}
方法改进和总结
我们可以看到这个方法存在着很多缺陷,这也是为什么我的标题中加入了“粗糙”的缘故:
1, 部分代码植入到了源代码中,如我们在源代码中重写了Dispose方法,加入了对于保存图像的调用相关代码,也加入了保存图像的方法到应用程序中。
当然,这一点我们可以通过重构以解决,把保存图片的代码抽离这个应该不会太让人纠结。把调用从Dispose方法中抽离出来,目前我的想法是使用多线程,一个线程用来运行待测程序,另外一个线程则用来截图。简单的多线程操作可以参见我的另外一篇介绍文章《Winform自动化测试解决对话框问题(多线程)》。
2,截图方法使用了Windows API,我们应该使用其他更为合适的方法。
3,上面的示例代码只是为了说明一个大体思路,并不能作为一个完整的解决方案。不过笔者会利用业余时间尽快实现一个具有实践意义的解决方案。
完整示例代码下载
示例代码下载
相关文章推荐
- 图像处理之积分图应用二(快速边缘保留滤波算法)
- .NET下文本相似度算法余弦定理和SimHash浅析及应用实例分析
- 关于遥感图像的控制点片匹配算法的一点想法(二)
- 关于图像相似度算法的文章
- 局部自适应自动色阶/对比度算法在图像增强上的应用。
- 图像处理之积分图应用二(快速边缘保留滤波算法)
- 牛人博客链接--高级算法、智能视频、嵌入式软件、DSP应用开发,algorithem,c++,c,视频处理,图像处理
- paper 101:图像融合算法及视觉艺术应用
- 基于局部均方差相关信息的图像去噪及其在实时磨皮美容算法中的应用
- 图像相似度算法的C#实现及测评
- 关于遥感图像的控制点片匹配算法的一点想法(二)
- 局部自适应自动色阶/对比度算法在图像增强上的应用。
- 从菜鸟到完全学会二维傅立叶在图像处理算法中的应用【老司机教你学傅立叶】
- 图像相似度算法--SIFT算法详解
- Opencv中K均值算法(K-Means)及其在图像分割中的应用
- 字符相似度算法及应用
- 机器学习算法原理与实践(二)、meanshift算法图解以及在图像聚类、目标跟踪中的应用
- OpenCV图像质量评价的SSIM算法(图像相似度)
- 插值算法在图像处理中的应用
- 图像相似度算法--SIFT算法详解