如何设计我的测试自动化

时间:2013-01-03 20:28:51

标签: testing automation

这是我的测试场景。

当命令行执行时 - 很多值被写入db中的不同表。

在db中有多个命令行选项和许多值/表要验证。我该如何设计db中的值检查?

到目前为止我做了什么 -

  • 执行命令

  • 连接到db

  • 运行特定于该命令的查询(这将非常特定于我需要查看哪些表的命令)

  • 从返回的数据集中检查if dt[row][col]="value i expect"

这里的优点是我必须编写更少的代码作为框架的一部分。 这样做的缺点是,在开发每个测试时我必须编写更多代码,而不是简化,有时可能会出现列名错误。

所以我试图看看我是否更好地简化了检查。类似于声明一个类(用于表),其中列作为公开属性。这样我至少不会让列名错误。

  1. 这是最简单的方法(从长远来看?我想编写更多可重用的代码)。如果没有,那么最好的方法是什么?
  2. 是否有一种简单的方法可以将表/列值从db导出到c#项目文件(作为类/代码),这样我就不必再将所有内容都放入代码中了。
  3. 如果有任何细节不清楚,或者我希望我详细说明细节,请告诉我。

    感谢您的光临。

1 个答案:

答案 0 :(得分:1)

我不知道这个问题的标准方法,但我会提供一些想法。

我经常发现自己创建表来表示表以利用编译时检查,所以我认为这是一个很好的方法。您可能希望了解Linq-to-SQL - 我认为它可以为您做很多事情。我有时在Ruby中使用ActiveRecord来实现这个目的,即使是在C#项目上,因为使用它进行开发非常快。

或者,您可能希望将测试放在文本文件中:

Command: 
command to execute

Expected Data:
SELECT column FROM table;
row name, column name, expected data
row name, column name, expected data
row name, column name, expected data

Expected Data:
SELECT column FROM table;
row name, column name, expected data
row name, column name, expected data

然后编写一些代码来加载和解析文件,运行命令并比较结果。这将只考虑每次测试时发生变化的事情,所以我不知道它是否会变得更好。

另一个想法是尝试将公共代码拉入基类并将不同的代码保存在子类中。此设计遵循模板方法模式。

实施例

class MyTest : CommandLineTest {
  public String Command() { return "Command to execute"; }
  public String DataRetrievalCommand() { return "SELECT column FROM table"; }

  public DataResult[] ExpectedData() {
    return [ new DataResult("column", "row", "value"), ...];
  }
}

超类将使用这些方法来获取命令和值,但它将是完成所有实际工作的人。与文本文件类似,但测试规范保存在代码中。

希望这有助于或至少得到一些想法。