• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1from ast import Return
2import os
3import sys
4from unittest import suite
5
6G_SUITE = ""
7G_MAXCASECNT = 5
8G_MUSTPASSPATH = "mustpass/"
9G_MUSTPASSFILE = ".txt"
10G_TMPPATH = "template/"
11G_TMPDIRPATH = G_TMPPATH + "ace_ets_template"
12G_HAPDIRPATH = "../act_etc_component_"
13G_IMPORTTEST = "import {}Jsunit from \'./{}.test.ets\';"
14G_IMPORTTESTCASE = "{}Jsunit()"
15G_PATHDIRPATH = "/entry/src/main/ets/MainAbility/pages/"
16G_PAGETEMPPATH = "/pagetemplate.ets"
17G_PAGEATTRTEMPPATH = "/pageattrtemplate.ets"
18G_TESTDIRPATH = "/entry/src/main/ets/test/"
19G_TESTCASETEMPPATH = "/testcasetemplate.ets"
20G_TESTTEMPPATH = "/List.test.ets"
21G_LISTTESTETSPATH = "/entry/src/main/ets/test/List.test.ets"
22G_PAGENAMEPATTERN = "##PAGENAME"
23G_ATTRNAMEPATTERN = "##ATTRNAME"
24G_LOWATTRNAMEPATTERN = "##LOWATTRNAME"
25G_PAGENAMETESETPATTERN = "##PAGENAMETEST"
26G_PAGEFILENAMEPATTERN = "##PAGEFILENAME"
27G_SUITENAMEPATTERN = "##SUITENAME"
28G_PAGENAMETESTPATTERN = "##PAGENAMETEXT"
29G_CONFIGJSONPATH = "/entry/src/main/config.json"
30G_BUILDGNPATH = "/BUILD.gn"
31G_TESTJSONPATH = "/Test.json"
32G_INDEXETSPATH = "/entry/src/main/ets/MainAbility/pages/index.ets"
33
34def writemultestcase():
35    print("writemultestcase")
36    writemultestcasecpp()
37    print("writemulbuildgn")
38    writemulbuildgn()
39
40def writemulbuildgn():
41    #生成buildgn
42    for suiteitem in G_SUITE:
43        subcasecnt = 0
44        subattcnt = 0
45        subgncnt = 0
46        suiteitemcap = "".join(suiteitem[:1].upper() + suiteitem[1:])
47        print("suite:", suiteitem, "----------------------")
48        #创建一个hap目录
49        hapdirpath = G_HAPDIRPATH + suiteitem.lower()
50        if os.path.exists(hapdirpath):
51            os.system(r"rm -rf {}".format(hapdirpath))
52            os.system(r"cp {} {} -r".format(G_TMPDIRPATH, hapdirpath))
53        else:
54            os.system(r"cp {} {} -r".format(G_TMPDIRPATH, hapdirpath))
55
56        mustpass = G_MUSTPASSPATH + suiteitem + G_MUSTPASSFILE
57        with open(mustpass) as mastpassfile:
58            compdict = {"":1}
59
60            importtestheads = []
61            importtests = []
62            for line in mastpassfile:
63                if line[0] == "#":
64                    continue
65                line = line.replace("\n", "")
66                linelist = line.split(",")
67                suitename = linelist[0]
68                casename = linelist[1]
69
70                if suitename in compdict:
71                    #同文件里加属性
72                    ind = compdict[suitename]
73                    subattcnt += 1
74                    #在page文件里追加attr内容
75                    suitenamecap = "".join(suitename[:1].upper() + suitename[1:])
76                    casenamecap = "".join(casename[:1].upper() + casename[1:])
77                    pagename = suitenamecap + casenamecap
78                    pagenametext = suitename + "-" + casenamecap
79                    pagefilename = hapdirpath + G_PATHDIRPATH + suitename + ".ets"
80                    attrtmp = G_TMPPATH + G_PAGEATTRTEMPPATH
81                    with open(attrtmp, encoding="utf-8", mode="r") as attrtmpfile:
82                        for attrtempline in attrtmpfile:
83                            attrtempline = attrtempline.replace(" ", "\ ")
84                            attrtempline = attrtempline.replace(G_PAGENAMETESTPATTERN, pagenametext)
85                            attrtempline = attrtempline.replace(G_ATTRNAMEPATTERN, casename)
86                            os.system(r"sed -i '{}a {}' {}".format(ind, attrtempline, pagefilename))
87                            ind += 1
88                    compdict[suitename] = ind
89
90                else:
91                    #创建不同页面
92                    subgncnt += 1
93                    subattcnt = 1
94                    ind = 29
95                    compdict[suitename] = ind
96                    postfix = '%04d' % subgncnt
97                    dirpath = suitename + postfix
98                    temppagefilename = G_TMPPATH + G_PAGETEMPPATH
99                    suitenamecap = "".join(suitename[:1].upper() + suitename[1:])
100                    casenamecap = "".join(casename[:1].upper() + casename[1:])
101                    pagename = suitename + casenamecap
102                    capagename = suitenamecap + casenamecap
103                    testname = pagename
104                    pagefilename = hapdirpath + G_PATHDIRPATH + suitename + ".ets"
105                    os.system(r"cp {} {}".format(temppagefilename, pagefilename))
106                    #替换page里的名称
107                    os.system(r"sed -i 's/{}/{}/g' {}".format(G_PAGENAMEPATTERN, capagename, pagefilename))
108                    #追加page里的attr
109                    pagenametext = suitename + "-" + casenamecap
110                    attrtmp = G_TMPPATH + G_PAGEATTRTEMPPATH
111                    with open(attrtmp, encoding="utf-8", mode="r") as attrtmpfile:
112                        for attrtempline in attrtmpfile:
113                            attrtempline = attrtempline.replace(" ", "\ ")
114                            attrtempline = attrtempline.replace(G_PAGENAMETESTPATTERN, pagenametext)
115                            attrtempline = attrtempline.replace(G_ATTRNAMEPATTERN, casename)
116                            os.system(r"sed -i '{}a {}' {}".format(ind, attrtempline, pagefilename))
117                            ind += 1
118                    compdict[suitename] = ind
119
120                    temptestfilename = G_TMPPATH + G_TESTCASETEMPPATH
121                    testfilename = hapdirpath + G_TESTDIRPATH + suitename + ".test.ets"
122                    os.system(r"cp {} {}".format(temptestfilename, testfilename))
123                    #替换test里的名称
124                    os.system(r"sed -i 's/{}/{}/g' {}".format(G_ATTRNAMEPATTERN, testname, testfilename))
125                    os.system(r"sed -i 's/{}/{}/g' {}".format(G_PAGENAMETESETPATTERN, testname+"Test", testfilename))
126                    os.system(r"sed -i 's/{}/{}/g' {}".format(G_PAGEFILENAMEPATTERN, pagename, testfilename))
127                    os.system(r"sed -i 's/{}/{}/g' {}".format(G_LOWATTRNAMEPATTERN, casename, testfilename))
128                    #替换config.json里的名称
129                    configjsonname = hapdirpath + G_CONFIGJSONPATH
130                    os.system(r"sed -i 's/{}/{}/g' {}".format(G_SUITENAMEPATTERN, suiteitemcap, configjsonname))
131                    os.system(r"sed -i 's/{}/{}/g' {}".format(G_PAGEFILENAMEPATTERN, casenamecap, configjsonname))
132                    #替换BUILD.gn里的名称
133                    buildgnname = hapdirpath + G_BUILDGNPATH
134                    os.system(r"sed -i 's/{}/{}/g' {}".format(G_SUITENAMEPATTERN, suiteitemcap, buildgnname))
135                    # formate gn
136                    formatcmd = "cat "+buildgnname+" | ~/workspace/oh31/prebuilts/build-tools/linux-x86/bin/gn format --stdin > FORMAT_RESULT.gn;cp -f FORMAT_RESULT.gn "+buildgnname+";rm FORMAT_RESULT.gn"
137                    os.system(formatcmd)
138                    #替换index.ets里的名称
139                    indexetsname = hapdirpath + G_INDEXETSPATH
140                    os.system(r"sed -i 's/{}/{}/g' {}".format(G_SUITENAMEPATTERN, suiteitemcap, indexetsname))
141
142                    #替换Test.json里的名称
143                    testjsonname = hapdirpath + G_TESTJSONPATH
144                    os.system(r"sed -i 's/{}/{}/g' {}".format(G_SUITENAMEPATTERN, suiteitemcap, testjsonname))
145
146                    importtestheads.append(G_IMPORTTEST.format(testname, suitename))
147                    importtests.append(G_IMPORTTESTCASE.format(testname))
148                subcasecnt += 1
149            #插入List.test.ets,装载多个testcase
150            ind = 16
151            for importtestsline in importtests:
152                os.system(r"sed -i '{}a \ \ {}' {}".format(ind, importtestsline, hapdirpath + G_LISTTESTETSPATH))
153                ind += 1
154            ind = 14
155            for importtestheadsline in importtestheads:
156                os.system(r"sed -i '{}a {}' {}".format(ind, importtestheadsline, hapdirpath + G_LISTTESTETSPATH))
157                ind += 1
158
159def writemultestcasecpp():
160    #生成testcase
161    for suiteitem in G_SUITE:
162        print("suite:", suiteitem)
163
164def removedir(rootdir):
165    for root,dirs,files in os.walk(rootdir, topdown=False):
166        for name in files:
167            os.remove(os.path.join(rootdir,name))
168        for name in dirs:
169            os.rmdir(os.path.join(rootdir,name))
170    os.rmdir(rootdir)
171
172
173def printhelp():
174    print("Need testsuite and codepattern:\n")
175    print("For example\n")
176    print("python3 .\GenerateTestCase.py apilack\n")
177    print("codepattern contains: apilack, attrlack\n")
178
179def new_report(bakdir, str):
180    files = os.listdir(bakdir)
181    lists = [] #列出目录的下所有文件和文件夹保存到lists
182    for f in files:
183        if "latest" in f:
184            continue
185        lists.append(f)
186
187    lists.sort(key=lambda fn:os.path.getmtime(bakdir + "/" + fn))  # 按时间排序
188    file_new = os.path.join(bakdir,lists[-1]) # 获取最新的文件保存到file_new
189    print("latest file:", file_new)
190    return file_new
191
192
193if __name__ == '__main__':
194    latestpath = new_report("reports", "")
195    tmpfile = "tmptestsuite.xml"
196    putfile = "/result/ActsLibuvTest.xml"
197    tasklogfile = "/log/task_log.log"
198    putdir = latestpath+putfile
199    tasklogpath = latestpath+tasklogfile
200
201    timelist = latestpath.split("/")
202    curtime = timelist[1].replace("\n", "")
203    testcaselist = []
204    total = 0
205    passcnt = 0
206    failcnt = 0
207    suitename = ""
208    #读取最近的tasklog文件
209    with open(tasklogpath) as tasklogbuf:
210        #从tasklog文件中获取运行的testcase的信息
211        for tasklogline in tasklogbuf:
212            if "[Start test suite [" in tasklogline:
213                suitelist = tasklogline.split("[Start test suite [")
214                suiteitem = suitelist[1].split("]")
215                suitename = suiteitem[0]
216            if "[ok " in tasklogline:
217                freslist = tasklogline.split("ok")
218                numcase = freslist[1]
219                numcase = numcase.replace(" ","")
220                numcase = numcase.replace("]","")
221                caseline = numcase.split("-")
222                total +=1
223                passcnt += 1
224                testcaselist.append(caseline[1]+"-true")
225            if "[not ok " in tasklogline:
226                freslist = tasklogline.split("not ok")
227                numcase = freslist[1]
228                numcase = numcase.replace(" ","")
229                numcase = numcase.replace("]","")
230                caseline = numcase.split("-")
231                total +=1
232                failcnt += 1
233                testcaselist.append(caseline[1]+"-false")
234    #将testcase信息生成文件
235    xmlfile = open(tmpfile, mode='w+')
236    xmlfile.write("<?xml version='1.0' encoding='UTF-8'?>\n")
237    xmlfile.write("<testsuites name=\"{}\" timestamp=\"{}\" time=\"0.0\" errors=\"0\" disabled=\"0\" failures=\"{}\" tests=\"{}\" ignored=\"0\" unavailable=\"0\" productinfo=\"{}\">\n".format(suitename, curtime, failcnt, total, "{}"))
238    xmlfile.write("  <testsuite name=\"{}\" time=\"0.0\" errors=\"0\" disabled=\"0\" failures=\"{}\" ignored=\"0\" tests=\"{}\" message=\"\">\n".format(suitename, failcnt, total))
239    for casename in testcaselist:
240        casename = casename.replace("\n","")
241        loccasename = casename.split("-")
242        recasename = loccasename[0]
243        casestate = loccasename[1]
244        xmlfile.write("    <testcase name=\"{}\" status=\"run\" time=\"0.0\" classname=\"{}\" result=\"{}\" level=\"1\" message=\"\" />\n".format(recasename, suitename, casestate))
245    xmlfile.write("  </testsuite>\n")
246    xmlfile.write("</testsuites>\n")
247    xmlfile.close()
248    #将tmp文件替换xts框架的result
249    os.system(r"cp {} {}".format(tmpfile, putdir))
250