我总是喜欢把事情分解成相关信息的组。例如,如果我有一个用户类,我可能会将其分解为几个更小的类:LoginCredentials、ProfileInfo、Settings 等,但我通常仍然会有一个包含这些子类的顶级 User 类。
我肯定会推荐的一件事是将对象传递给一个 FillForm 函数,而不是所有这些单独的函数。使用这种方法有一些很大的优势。第一,您可以拥有一些用于许多测试用例的“通用”预配置对象。例如:
public class FormInfo
{
string Domain;
string Name;
string Category;
// etc...
public FormInfo(string domain, string name, string category)
{
Domain = domain;
Name = name;
Category = category;
// etc...
}
}
// Somewhere in your initialization code
public static FormInfo Info1 = new FormInfo("myDomain1", "myName1", "myCategory1");
public static FormInfo Info2 = new FormInfo("myDomain2", "myName2", "myCategory2");
You can still update one of your common merchants if you need to do something one-off:
// In your test case:
Info1.Category = "blah";
FormPage.FillForm(Info1);
或者,如有必要,您可以为特定的测试用例创建一个全新的商家对象。您还可以使用这些对象进行字段验证之类的操作,或者我通常会破坏页面对象模式以进行特定字段验证,因此如果我正在验证商家域字段,我可能会这样做:
Info1.Domain = null; //This should make the FillForm function skip doing anything with this field.
FormPage.FillForm(Info1);
FormPage.DomainTextBox.Text = "field validation string";
这种方法的另一个重要优点是,如果页面被更新以添加、删除或修改字段,您只需要更新您的 FormInfo 对象和 FillForm 函数,并且不需要修改调用 FillForm 函数的特定测试用例 -假设他们正在使用您常用的 FormInfo 对象之一。获得更多覆盖的另一种可能性是设置一个常见的 FormInfo 对象,以便为每个符合最小/最大长度的字段生成随机字符串,并在所有不同的允许字符之间循环。这允许您从同一组测试中获得一些额外的测试,尽管如果您开始仅从特定字符串获取失败结果,它也会增加一些噪音,所以要小心。