【问题标题】:katalon test case if sql query return correct value如果 sql 查询返回正确的值,katalon 测试用例
【发布时间】:2019-09-25 01:39:26
【问题描述】:

我有查询table 1 (table 1 has column A, B, C) 中所有项目的数据文件/数据库

SELECT * from DB1.table1

然后是测试用例

  1. 从数据文件中获取数据

    def data = findTestData('Data Files/Database')

  2. 在 A 列中找到值 123,然后检查 C 列,如果 0 通过,如果不是 0,则失败。早期的代码有效。如下代码和结果。

  3. 现在A列可能出现123多次出现的问题,如何增强代码使用datatime列只检查最新值?

import static com.kms.katalon.core.testdata.TestDataFactory.findTestData

import com.kms.katalon.core.logging.KeywordLogger
import com.kms.katalon.core.testdata.TestData as TestData
import com.kms.katalon.core.util.KeywordUtil

def KeywordLogger result = KeywordUtil.logInfo()

TestData data = findTestData('Data Files/Database')



for(i=1; i<= data.getRowNumbers(); i++){
	if(data.getValue(1, i)=='123'){
		println data.getValue(3,i)
		assert data.getValue(3,i) == '0'
		KeywordUtil.markPassed("test passed")
	}
}

测试用例结果,实际:123值为0。测试结果通过。

    2019-09-26 09:40:55.333 INFO  c.k.katalon.core.main.TestCaseExecutor   - --------------------
    2019-09-26 09:40:55.335 INFO  c.k.katalon.core.main.TestCaseExecutor   - START Test Cases/DatabaseTest/Get DB data - Copy - Copy
    2019-09-26 09:40:55.602 DEBUG testcase.Get DB data - Copy - Copy       - 1: result = logInfo()
    2019-09-26 09:40:55.605 INFO  com.kms.katalon.core.util.KeywordUtil    - null
    2019-09-26 09:40:55.607 DEBUG testcase.Get DB data - Copy - Copy       - 2: data = findTestData("Data Files/Database")
    2019-09-26 09:40:55.904 INFO  c.k.katalon.core.db.DatabaseConnection   - dbServerInfo = PostgreSQL 11.5 (Debian 11.5-1.pgdg90+1)
    2019-09-26 09:40:55.939 DEBUG testcase.Get DB data - Copy - Copy       - 3: for ([i = 1, i <= data.getRowNumbers(), (i++)])
    2019-09-26 09:40:55.954 DEBUG testcase.Get DB data - Copy - Copy       - 1: if (data.getValue(1, i) == "123")
    2019-09-26 09:40:56.042 DEBUG testcase.Get DB data - Copy - Copy       - 1: if (data.getValue(1, i) == "123")
    2019-09-26 09:40:56.043 DEBUG testcase.Get DB data - Copy - Copy       - 1: if (data.getValue(1, i) == "123")
    2019-09-26 09:40:56.044 DEBUG testcase.Get DB data - Copy - Copy       - 1: if (data.getValue(1, i) == "123")
    2019-09-26 09:40:56.045 DEBUG testcase.Get DB data - Copy - Copy       - 1: println(data.getValue(3, i))
    true
    2019-09-26 09:40:56.050 DEBUG testcase.Get DB data - Copy - Copy       - 2: assert data.getValue(3, i) == "0"
    2019-09-26 09:40:56.054 DEBUG testcase.Get DB data - Copy - Copy       - 3: markPassed("test passed")
    2019-09-26 09:40:56.057 DEBUG com.kms.katalon.core.util.KeywordUtil    - ✓ test passed
    2019-09-26 09:40:56.058 DEBUG testcase.Get DB data - Copy - Copy       - 1: if (data.getValue(1, i) == "123")
    2019-09-26 09:40:56.059 DEBUG testcase.Get DB data - Copy - Copy       - 1: if (data.getValue(1, i) == "123")
    2019-09-26 09:40:56.060 DEBUG testcase.Get DB data - Copy - Copy       - 1: if (data.getValue(1, i) == "123")
    2019-09-26 09:40:56.062 INFO  c.k.katalon.core.main.TestCaseExecutor   - END Test Cases/DatabaseTest/Get DB data - Copy - Copy

然后我将 123 更改为 234。实际:234 不是 0。然后测试用例失败。

2019-09-26 09:44:38.155 INFO  c.k.katalon.core.main.TestCaseExecutor   - --------------------
2019-09-26 09:44:38.157 INFO  c.k.katalon.core.main.TestCaseExecutor   - START Test Cases/DatabaseTest/Get DB data - Copy - Copy
2019-09-26 09:44:38.403 DEBUG testcase.Get DB data - Copy - Copy       - 1: result = logInfo()
2019-09-26 09:44:38.408 INFO  com.kms.katalon.core.util.KeywordUtil    - null
2019-09-26 09:44:38.409 DEBUG testcase.Get DB data - Copy - Copy       - 2: data = findTestData("Data Files/Database")
2019-09-26 09:44:38.681 INFO  c.k.katalon.core.db.DatabaseConnection   - dbServerInfo = PostgreSQL 11.5 (Debian 11.5-1.pgdg90+1)
2019-09-26 09:44:38.709 DEBUG testcase.Get DB data - Copy - Copy       - 3: for ([i = 1, i <= data.getRowNumbers(), (i++)])
2019-09-26 09:44:38.722 DEBUG testcase.Get DB data - Copy - Copy       - 1: if (data.getValue(1, i) == "234")
2019-09-26 09:44:38.798 DEBUG testcase.Get DB data - Copy - Copy       - 1: if (data.getValue(1, i) == "234")
2019-09-26 09:44:38.799 DEBUG testcase.Get DB data - Copy - Copy       - 1: if (data.getValue(1, i) == "234")
2019-09-26 09:44:38.801 DEBUG testcase.Get DB data - Copy - Copy       - 1: if (data.getValue(1, i) == "234")
2019-09-26 09:44:38.802 DEBUG testcase.Get DB data - Copy - Copy       - 1: println(data.getValue(3, i))
false
2019-09-26 09:44:38.806 DEBUG testcase.Get DB data - Copy - Copy       - 2: assert data.getValue(3, i) == "0"
2019-09-26 09:44:38.826 ERROR c.k.katalon.core.main.TestCaseExecutor   - ❌ Test Cases/DatabaseTest/Get DB data - Copy - Copy FAILED.
Reason:
Assertion failed: 

assert data.getValue(3,i) == '0'
       |    |          |  |
       |    false      43 false
       com.kms.katalon.core.testdata.DBData@79145d5a

	at Get DB data - Copy - Copy.run(Get DB data - Copy - Copy:16)
	at com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:194)
	at com.kms.katalon.core.main.ScriptEngine.runScriptAsRawText(ScriptEngine.java:119)
	at com.kms.katalon.core.main.TestCaseExecutor.runScript(TestCaseExecutor.java:337)
	at com.kms.katalon.core.main.TestCaseExecutor.doExecute(TestCaseExecutor.java:328)
	at com.kms.katalon.core.main.TestCaseExecutor.processExecutionPhase(TestCaseExecutor.java:307)
	at com.kms.katalon.core.main.TestCaseExecutor.accessMainPhase(TestCaseExecutor.java:299)
	at com.kms.katalon.core.main.TestCaseExecutor.execute(TestCaseExecutor.java:233)
	at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:114)
	at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:105)
	at com.kms.katalon.core.main.TestCaseMain$runTestCase$0.call(Unknown Source)
	at TempTestCase1569462275661.run(TempTestCase1569462275661.groovy:21)

2019-09-26 09:44:38.838 INFO  c.k.katalon.core.main.TestCaseExecutor   - END Test Cases/DatabaseTest/Get DB data - Copy - Copy

【问题讨论】:

  • 显示数据样例,显示表结构样例。
  • 添加了示例数据库表
  • @user2201789 将“123”更改为“234”后,选择了第二行,该行的第三列的值为“1”,并且您断言“0”。所以,测试用例正确地失败了。
  • @MateMrše 是的,你是对的。这就是我让它失败的意图。我的新问题是 2 值为“123”,我如何根据最后一列数据时间验证最新的“123”?
  • 那会更复杂。就像现在一样,将逐行检查值“123”,然后将第三列与“0”进行比较。所以第一次 '123' assert = 0 会通过,第二次出现'123' assert = 0 会失败。这还不够吗?

标签: katalon-studio


【解决方案1】:

如果示例中的测试数据表'Data Files/Database' 是excel 表(不知道如何对数据库执行相同操作),此代码sn-p 将执行您想要的操作:

def data = findTestData("Data Files/Database")

for(i=1; i<= data.getRowNumbers(); i++){
    if(data.getObjectValue(1, i)=='123'){
        println data.getObjectValue(3,i)
        assert data.getObjectValue(3,i) != '0'
    }
}

【讨论】:

  • 这里可以使用getRowNumbers和getObjectValue,如果A列,值123有时出现在第1行,有时出现在第2行?如何不查找固定行而不是查找列中的值?
  • for 循环将逐行搜索第一列。当它找到值 '123' 时,它会进入 if() 部分,然后断言该行的第三列的值不为 0。
  • 知道了。断言后。我可以使用内置的实用程序来打印它或标记.passed 或者标记.失败吗?
  • 是的,你可以。但是标记失败没有用,如果断言失败,测试自动失败。
  • 我将 getObjectValue 更改为 getValue,并将 assert != '0' 更改为 == '0'。结果看起来不错。更新主帖。感谢您的建议!
【解决方案2】:

也许你正在寻找某种 IF 条件来显示一些东西

 select t.a ,t.b,
     IF( t.c = 1 , "SUCCESS", "FAIL")  as status

 from table as t

【讨论】:

  • 谢谢。更有可能,但katalon 使用不同的关键字/语法。我不知道该用什么。
猜你喜欢
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
  • 2019-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多