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

7/28

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