Java 如何使用Selenium测试通过web应用程序的注册页面输入的数据是否存储到数据库中?

Java 如何使用Selenium测试通过web应用程序的注册页面输入的数据是否存储到数据库中?,java,selenium,testing,automated-tests,Java,Selenium,Testing,Automated Tests,我是硒的新手。我正在测试一个用户注册表单,在该表单中我必须验证数据是否插入到数据库中。我使用下面的代码来检查。还有比这更好的选择吗?我首先检查是否插入了注册ID,然后检查其他详细信息 @Test public void testVerifyListOfRecords() throws InterruptedException { String query = "SELECT ID FROM usermaster WHERE RegistrationNumber = '" + REGNO +

我是硒的新手。我正在测试一个用户注册表单,在该表单中我必须验证数据是否插入到数据库中。我使用下面的代码来检查。还有比这更好的选择吗?我首先检查是否插入了注册ID,然后检查其他详细信息

@Test
public void testVerifyListOfRecords() throws InterruptedException {

  String query = "SELECT ID FROM usermaster WHERE RegistrationNumber = '" + REGNO + "' ";
  String ID = DatabaseConnector.executeSQLQuery("QA", query);

  if(ID == ""){
    STATUS = "FALSE";
    System.out.println("REGISTRATION NUMBER IS NOT INSERTED..!! TEST FAILED..!!");
  } else STATUS = "TRUE";

  String sqlQuery = "SELECT FirstName,LastName,SpecialityCode,QualificationCode FROM usermaster WHERE ID = '" + ID + "' ";
  List<String> listOfDBValues = new ArrayList<String>();
  listOfDBValues = DatabaseConnector.executeSQLQuery_List("QA", sqlQuery);
  List<String> Branch = new ArrayList<>();
  Branch.add(listOfDBValues.get(0));

  List<String> list1 = new ArrayList<>(Arrays.asList("testfirstname testlastname ORP DM"));
  Assert.assertEquals(STATUS, "TRUE");
  System.out.println("STATUS IS " + STATUS);
  Assert.assertEquals(Branch, list1);
}
@测试
public void testVerifyListOfRecords()引发InterruptedException{
String query=“从usermaster中选择ID,其中RegistrationNumber=”+REGNO+”;
字符串ID=DatabaseConnector.executeSQLQuery(“QA”,查询);
如果(ID==“”){
STATUS=“FALSE”;
System.out.println(“未插入注册号..!!测试失败..!!”;
}else STATUS=“TRUE”;
String sqlQuery=“从usermaster中选择FirstName、LastName、SpecialityCode、QualificationCode,其中ID=”+ID+“”;
List listOfDBValues=new ArrayList();
listOfDBValues=DatabaseConnector.executeSQLQuery_列表(“QA”,sqlQuery);
列表分支=新的ArrayList();
add(listOfDBValues.get(0));
List list1=newarraylist(Arrays.asList(“testfirstname testlastname ORP DM”);
Assert.assertEquals(状态为“TRUE”);
System.out.println(“状态为”+状态);
Assert.assertEquals(分支,列表1);
}

这不是一个真正的硒问题。。。这更像是一个自动化和/或数据库问题。Selenium只与浏览器交互。如果您没有其他方法来验证用户是否已注册并且这是一项要求,那么查询数据库似乎是验证它的最直接的方法

为了使该功能更好/更高效,我将改变以下几点

  • 您似乎使用了很多全局变量,例如
    状态
    注册号
    。这通常不是一个好的做法。传递函数所需的内容

  • 除非我遗漏了什么,否则您可以更有效地使用变量。在这个短函数中有几个例子,其中变量中已经有一个值,在其中存储另一个变量,然后断言它的值。无需将其放入新变量,只需从初始变量断言其值即可。这将最小化代码行,并消除不需要的变量,从而使代码更易于阅读和理解

  • 为每个变量选择最佳的数据类型。例如,当您应该使用
    布尔值时,您正在
    字符串中存储“TRUE”/“FALSE”。不要创建
    列表
    ,只添加一项。。。只需使用
    字符串
    变量即可

  • 尽早且经常地断言。在函数结束之前,您不会断言
    STATUS
    的值,但在前几行代码中,您知道
    STATUS
    的值,然后点击数据库。当您让
    STATUS
    尽快通过测试并避免额外点击数据库、额外代码等时,您应该正确地断言它的值

  • 您有多个与您的断言冗余的系统输出。如果
    STATUS
    的值正好位于断言之后,则无需对其进行sysout,如果断言不是
    “TRUE”
    ,则断言将失败

  • 断言有一个可选的消息参数。使用它。添加关于断言测试内容的注释,例如“验证ID不为空”,以便在某一天失败时,您可以从日志中知道它正在验证什么。使其具有描述性和实用性,这样,如果您所拥有的只是该消息,那么您将知道它正在测试什么,以及它可能失败的原因

  • 下面是我如何清理的

    @Test
    public void testVerifyListOfRecords(String regNo) throws InterruptedException
    {
        String query = "SELECT ID FROM usermaster WHERE RegistrationNumber = '" + regNo + "' ";
        String ID = DatabaseConnector.executeSQLQuery("QA", query);
        Assert.assertFalse(ID == "", "Verify ID is not empty");
    
        String sqlQuery = "SELECT FirstName,LastName,SpecialityCode,QualificationCode FROM usermaster WHERE ID = '" + ID + "' ";
        List<String> listOfDBValues = DatabaseConnector.executeSQLQuery_List("QA", sqlQuery);
        List<String> list1 = new ArrayList<>(Arrays.asList("testfirstname testlastname ORP DM"));
        Assert.assertEquals(listOfDBValues.get(0), list1, "Verify user registration data is correct");
    }
    
    @测试
    public void testVerifyListOfRecords(字符串regNo)抛出InterruptedException
    {
    String query=“从usermaster中选择ID,其中RegistrationNumber=”+regNo+”;
    字符串ID=DatabaseConnector.executeSQLQuery(“QA”,查询);
    Assert.assertFalse(ID==“”,“验证ID不为空”);
    String sqlQuery=“从usermaster中选择FirstName、LastName、SpecialityCode、QualificationCode,其中ID=”+ID+“”;
    List listOfDBValues=DatabaseConnector.executeSQLQuery_列表(“QA”,sqlQuery);
    List list1=newarraylist(Arrays.asList(“testfirstname testlastname ORP DM”);
    Assert.assertEquals(listOfDBValues.get(0),list1,“验证用户注册数据是否正确”);
    }
    
    这不是一个真正的硒问题。。。这更像是一个自动化和/或数据库问题。Selenium只与浏览器交互。如果您没有其他方法来验证用户是否已注册并且这是一项要求,那么查询数据库似乎是验证它的最直接的方法

    为了使该功能更好/更高效,我将改变以下几点

  • 您似乎使用了很多全局变量,例如
    状态
    注册号
    。这通常不是一个好的做法。传递函数所需的内容

  • 除非我遗漏了什么,否则您可以更有效地使用变量。在这个短函数中有几个例子,其中变量中已经有一个值,在其中存储另一个变量,然后断言它的值。无需将其放入新变量,只需从初始变量断言其值即可。这将最小化代码行,并消除不需要的变量,从而使代码更易于阅读和理解

  • 为每个变量选择最佳的数据类型。例如,当您应该使用
    布尔值时,您正在
    字符串中存储“TRUE”/“FALSE”。不要创建
    列表
    ,只添加一项。。。只需使用
    字符串
    变量即可

  • 尽早且经常地断言。在函数结束之前,您不会断言
    STATUS
    的值,但在前几行代码中,您知道
    STATUS
    的值,然后点击数据库。你应该断言