提交 c6a6e73b 创建 作者: 王晓庆's avatar 王晓庆

7/28

上级 da87519b
流水线 #118180 已失败 于阶段
用时 24 秒
...@@ -14,7 +14,7 @@ case1: ...@@ -14,7 +14,7 @@ case1:
<<: *codecode-runner <<: *codecode-runner
script: script:
- /opt/mssql/bin/sqlservr > /dev/null & - /opt/mssql/bin/sqlservr > /dev/null &
- python3 testcases.py 1 - python3 testcases.py ci_test 1
- diff output1.txt user_output1.txt -b -B -y -i -W 100 - diff output1.txt user_output1.txt -b -B -y -i -W 100
- echo -e "\n*******************************************\nexec-score 60\n*******************************************\n" - echo -e "\n*******************************************\nexec-score 60\n*******************************************\n"
only: only:
...@@ -40,7 +40,7 @@ case2: ...@@ -40,7 +40,7 @@ case2:
<<: *codecode-runner <<: *codecode-runner
script: script:
- /opt/mssql/bin/sqlservr > /dev/null & - /opt/mssql/bin/sqlservr > /dev/null &
- python3 testcases.py 2 - python3 testcases.py ci_test 2
- diff output2.txt user_output2.txt -b -B -y -i -W 100 - diff output2.txt user_output2.txt -b -B -y -i -W 100
- echo -e "\n*******************************************\nexec-score 80\n*******************************************\n" - echo -e "\n*******************************************\nexec-score 80\n*******************************************\n"
only: only:
...@@ -66,7 +66,7 @@ case3: ...@@ -66,7 +66,7 @@ case3:
<<: *codecode-runner <<: *codecode-runner
script: script:
- /opt/mssql/bin/sqlservr > /dev/null & - /opt/mssql/bin/sqlservr > /dev/null &
- python3 testcases.py 3 - python3 testcases.py ci_test 3
- diff output3.txt user_output3.txt -b -B -y -i -W 100 - diff output3.txt user_output3.txt -b -B -y -i -W 100
- echo -e "\n*******************************************\nexec-score 100\n*******************************************\n" - echo -e "\n*******************************************\nexec-score 100\n*******************************************\n"
only: only:
......
IF db_id('TPCH') IS NULL -- 每次建库前先将原来的库删掉
CREATE DATABASE TPCH IF db_id('TPCH') IS NOT NULL
USE master
ALTER DATABASE TPCH SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DROP DATABASE TPCH
CREATE DATABASE TPCH
USE TPCH USE TPCH
-- 建表
IF OBJECT_ID('region', 'U') IS NULL IF OBJECT_ID('region', 'U') IS NULL
CREATE TABLE region ( CREATE TABLE region (
regionkey INTEGER PRIMARY KEY, regionkey INTEGER PRIMARY KEY,
...@@ -98,6 +99,7 @@ IF OBJECT_ID('lineitem', 'U') IS NULL ...@@ -98,6 +99,7 @@ IF OBJECT_ID('lineitem', 'U') IS NULL
FOREIGN KEY(partkey,suppkey) REFERENCES PartSupp(partkey,suppkey) /* extendedprice = quantity*Part.retailprice */ FOREIGN KEY(partkey,suppkey) REFERENCES PartSupp(partkey,suppkey) /* extendedprice = quantity*Part.retailprice */
) )
-- 插入数据
-- region -- region
-- regionkey, name, comment -- regionkey, name, comment
INSERT INTO region VALUES ('1', '亚洲', '亚洲地区') INSERT INTO region VALUES ('1', '亚洲', '亚洲地区')
......
...@@ -103,7 +103,7 @@ def compare_file(file1, file2, seqNum): ...@@ -103,7 +103,7 @@ def compare_file(file1, file2, seqNum):
if __name__ == "__main__": if __name__ == "__main__":
print() print()
print(Fore.YELLOW + "提示:\n1. 启用验证前一定要先保存 sql 文件。\n2. 如果验证程序长时间未结束,说明源代码中可能存在死循环。请停止验证程序,修改源代码后再验证。", file = stream) print(Fore.YELLOW + "提示:\n1. 启用验证前一定要先保存 sql 文件。\n2. 每次启动验证,均会重新创建数据库、数据表和插入数据。", file = stream)
print(Fore.WHITE, file = stream) print(Fore.WHITE, file = stream)
# 移除比较结果文件 # 移除比较结果文件
...@@ -121,8 +121,7 @@ if __name__ == "__main__": ...@@ -121,8 +121,7 @@ if __name__ == "__main__":
break break
print("\n正在验证 case{0}。\n正在将 python 程序的输出内容保存到文件 {1} 中。".format(seqNum, useroutputFile)) print("\n正在验证 case{0}。\n正在将 python 程序的输出内容保存到文件 {1} 中。".format(seqNum, useroutputFile))
# 将对应的case号当参数传入 # 将对应的case号当参数传入
runCommand = "python testcases.py {0}".format(seqNum) runCommand = "python testcases.py local_test {0}".format(seqNum)
print(Fore.RED + runCommand, file = stream)
execResult = os.system(runCommand) execResult = os.system(runCommand)
if execResult != 0: if execResult != 0:
print(Fore.RED + "应用程序异常,返回值:{0}".format(execResult), file = stream) print(Fore.RED + "应用程序异常,返回值:{0}".format(execResult), file = stream)
......
...@@ -10,9 +10,11 @@ import pandas as pd ...@@ -10,9 +10,11 @@ import pandas as pd
import sys import sys
# 取得sql文件名称 # 取得sql文件名称
sql_file = "query" + sys.argv[1] + ".sql" sql_file = "query" + sys.argv[2] + ".sql"
user_output_txt_file = "user_output" + sys.argv[1] + ".txt" user_output_txt_file = "user_output" + sys.argv[2] + ".txt"
user_output_csv_file = "user_output" + sys.argv[1] + ".csv" user_output_csv_file = "user_output" + sys.argv[2] + ".csv"
# 验证类型:本地--local_test,线上--ci_test
test_type = sys.argv[1]
# 可能连接数据库时需要消耗一点时间,这里用循环的方式 # 可能连接数据库时需要消耗一点时间,这里用循环的方式
def get_conn(): def get_conn():
...@@ -21,13 +23,13 @@ def get_conn(): ...@@ -21,13 +23,13 @@ def get_conn():
try: try:
# 调用远程driver,获取成功即返回 # 调用远程driver,获取成功即返回
if i==0: if i==0:
# 等待1秒后重新获取 # 等待5秒后重新获取
sleep(5) sleep(5)
elif i == 1: elif i == 1:
# 等待5秒后重新获取 # 等待10秒后重新获取
sleep(10) sleep(10)
else: else:
# 等待10秒后重新获取 # 等待15秒后重新获取
sleep(15) sleep(15)
# 根据平台不同采用不同的连接方式 # 根据平台不同采用不同的连接方式
if sys.platform == 'linux': if sys.platform == 'linux':
...@@ -46,7 +48,7 @@ def get_conn(): ...@@ -46,7 +48,7 @@ def get_conn():
# 将sql文件的内容转换成字符串 # 将sql文件的内容转换成字符串
def parse_sql(filename): def parse_sql(filename):
# 读取 sql 文件文本内容,sqltxt 为 list 类型 # 读取 sql 文件文本内容,sqltxt 为 list 类型
sql = open(filename, 'r', encoding = 'utf8') sql = open(filename, 'r', encoding = 'utf-8')
sqltxt = sql.readlines() sqltxt = sql.readlines()
# 读取之后关闭文件 # 读取之后关闭文件
...@@ -56,6 +58,7 @@ def parse_sql(filename): ...@@ -56,6 +58,7 @@ def parse_sql(filename):
sql = "".join(sqltxt) sql = "".join(sqltxt)
return sql return sql
# return sql.encode('gbk')
# 主函数 # 主函数
if __name__ == '__main__': if __name__ == '__main__':
...@@ -64,8 +67,8 @@ if __name__ == '__main__': ...@@ -64,8 +67,8 @@ if __name__ == '__main__':
conn = get_conn() conn = get_conn()
cursor = conn.cursor() cursor = conn.cursor()
# 只有第一次运行case时才建库、建表 # 只有本地验证第一次运行case或者线上验证时才建库、建表
if int(sys.argv[1]) == 1: if (int(sys.argv[2]) == 1 and test_type == "local_test") or test_type == "ci_test":
# 创建测试数据库 # 创建测试数据库
createdb_sql = parse_sql('createdb.sql') createdb_sql = parse_sql('createdb.sql')
conn.autocommit(True) conn.autocommit(True)
...@@ -75,7 +78,7 @@ if __name__ == '__main__': ...@@ -75,7 +78,7 @@ if __name__ == '__main__':
# 创建数据库表 # 创建数据库表
createtable_sql = parse_sql('createtable.sql') createtable_sql = parse_sql('createtable.sql')
cursor.execute(createtable_sql) cursor.execute(createtable_sql)
# conn.commit() conn.commit()
# 运行学生代码 # 运行学生代码
query_sql = parse_sql(sql_file) query_sql = parse_sql(sql_file)
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论