Testing 如何设计我的测试自动化

Testing 如何设计我的测试自动化,testing,automation,Testing,Automation,这是我的测试场景 当命令行执行时,许多值被写入数据库中的不同表中 在db中有多个命令行选项和许多要验证的值/表。我应该如何设计db中的值检查 到目前为止我所做的一切- 执行命令 连接到数据库 运行特定于命令的查询(这将非常特定于我需要查看哪些表的命令) 从返回的数据集中,检查是否dt[row][col]=“我期望的值” 这里的优点是,作为框架的一部分,我必须编写更少的代码。 这样做的缺点是,在开发每个测试时,我必须编写更多的代码,而不是简化代码,有时可能会弄错列名 所以我想看看我是否能更好地

这是我的测试场景

当命令行执行时,许多值被写入数据库中的不同表中

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

到目前为止我所做的一切-

  • 执行命令

  • 连接到数据库

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

  • 从返回的数据集中,检查是否dt[row][col]=“我期望的值”

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

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

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


    谢谢您的关注。

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

    我通常会创建类来表示表,以利用编译时检查,所以我认为这是一个好方法。您可能需要研究Linq到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"), ...];
      }
    }
    
    超类将使用这些方法来获取命令和值,但它将完成所有实际工作。与文本文件的想法类似,但测试规范保存在代码中


    希望这能有所帮助,或者至少能得到一些想法。

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

    我通常会创建类来表示表,以利用编译时检查,所以我认为这是一个好方法。您可能需要研究Linq到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"), ...];
      }
    }
    
    超类将使用这些方法来获取命令和值,但它将完成所有实际工作。与文本文件的想法类似,但测试规范保存在代码中


    希望这能有所帮助,或者至少能让一些想法得以实现。

    感谢您的回复。我想我也会选择这个类/属性。至少我的其他自动化系统就是这样设计的。我研究了linq to sql,它似乎为我提供了一个数据层来查询数据库(而不是加载到数据集)。对吗?还有其他方法可以自动生成c#属性的表/列。谢谢。我对Linq to SQL不太熟悉。我相信它将为您创建表示数据库表的类。这些类将为您提供读取和写入数据库的方法,因此它应该可以消除拼写错误列名的可能性。感谢您的回复。我想我也会选择这个类/属性。至少我的其他自动化系统就是这样设计的。我研究了linq to sql,它似乎为我提供了一个数据层来查询数据库(而不是加载到数据集)。对吗?还有其他方法可以自动生成c#属性的表/列。谢谢。我对Linq to SQL不太熟悉。我相信它将为您创建表示数据库表的类。这些类将为您提供读取和写入数据库的方法,因此它应该可以消除拼写错误列名的可能性。