最近实习,因工作需求,需要对大量源码分别用不同编译器进行编译执行并分别记录文件编译信息以及编译成功运行的信息,并根据要求记录每个文件的csv信息。小组提供的一个稍有简陋的shell脚本功能有限,个人也完全不懂shell。因此重编写了一个小工具,记录之,尽管可能重用率可能并不高。
工具工作内容:
- 单一项目文件夹中不相干的每一个源码(c/c++)进行三种编译器编译(gcc/clang以及公司自己的编译器)
- 对编译成功生成的a.out进行自动运行
- 对每个文件每种编译器编译运行的详情进行日志记录
- 将自动运行的情况对汇总的csv文件进行填充
csv填充格式要求如下:(便于对照代码进行修改)
主要注意对其column编号。其中BCDE是由文件夹目录等拆分出的填充信息,FJ两列信息是在每个文件中定义的://kind:normal 、//expect result:1这样。result分为1,2,3三种状态,KLM列也是按运行情况填充1、2、3这三种内容,GHI按运行情况填充字符’○’、’ב这两种内容。
具体文件及使用方法见repo链接:autoCompileTest
代码:
#! /usr/bin/env python
# coding=utf-8
#Author:BaoJunxian
#Date:2018/5/28
import os,openpyxl,subprocess
from openpyxl import styles
TEST_FILE_SUFFIX = ('.c','.c++','.cxx','.cpp','.C','.cc')
C_FILE_SUFFIX = ('.c')
CPP_FILE_SUFFIX = ('.c++','.cxx','.cpp','.C','.cc')
C_COMPILE = ['gcc','clang','fcc -Xg']
CC_COMPILE = ['g++','clang++','FCC -Xg']
#some configurations
CSV_URL = '/home/baojx/test_case/19_Arrays_of_Variable_Length/GNU拡張仕様テスト仕様書_JP.xlsx'
CSV_TMP = ''.join([CSV_URL,'.bak'])
MODI_SHEET = 'Content'
#some modi constant val def
TEST_CORDANCE = '○'
TEST_DISCORDANCE = '×'
ALL_PASS = 1
HALF_PASS = 2
ALL_ERROR = 3
#parse content for csv basic info modification,return tuple(caseType,expectResult)
def contentParse(fileName):
with open(fileName) as target:
while True:
content = next(target,