因为一些私人的事情,本来早已经应该完成的一篇文章一直到今天才可以草草了结。在前面的两篇文 章《图像相似度算法的C#实现及测评》《对“画条线”(Draw a line)的单元测试几点想法和实践 》中 ,先后介绍了一个简单的会读直方图算法和一些关于GUI画图的测试想法。有必要说明的是,在《对“画 条线”(Draw a line)的单元测试几点想法和实践》中提到的几种方法,最实用的是Mock法并不是今天 的主题。
这篇文章中继续前面的思路,简单写写有关GUI自动化测试的一点想法。
问题
对于画线,画图等应用程序的功能自动化测试的解决方案?
解决思路
采取截图法,即将用例中的输出截图,以图片作为输出结果,当然之前需要一个相应的图片作为预期 结果,以便于比较。
对于预期结果图片,可以采用的方式是先运行一次自动化测试代码截得一幅图片,然后手动检查图片 是否为与其效果,如是则将该图片作为预期结果。(在功能自动化测试中,在第一次运行自动化测试脚本 的时候,是应该在人工监视的条件下进行的,而更多时候在我们调试相应的脚本的时候就已经完成了相应 的工作。)
示例代码
1,待测代码示例
Draw A Line
/// <summary>
/// 在Windows窗口上画图形
/// </summary>
class Draw_A_Line : System.Windows.Forms.Form
{
//private Form MainForm;
System.ComponentModel.Container component = null;
Pen myPen = new Pen(Color.Black);
Bitmap bmpImg = null;
public Draw_A_Line()
{
InitializeComponent();
}
private void InitializeComponent()
{
this.component = new System.ComponentModel.Container();
this.Size = new Size(256, 256);
this.Text = "TestMainForm";
}
/// <summary>
/// 清理正在使用的资源
/// </summary>
/// <param name="disposing"></param>
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (component != null)
{
saveBmp(); //保存截图
component.Dispose();
}
}
base.Dispose(disposing);
}
//static Graphics SaveGraph;
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
myPen.Width = 5;
g.DrawLine(myPen, 16, 27, 38, 49);
}
}