Sharing today is a test gadget written in the quality assurance process-multi-country language calibration background:
1. Our app supports multiple languages, language files are dynamically pulled through the server, and the language of the server is added by the operator manually, the integrity is not guaranteed, and integrity will cause you obviously use German, the result is the embarrassing event of Chinese
2. Because it is a multinational language, it is necessary to rely on the translation company to translate localized Chinese into XX country, our language file uses format character:%s such a format string, but is to the translation company, the result of return often appears% s such result, The result is that the client uses these strings directly crash the problem analysis:
To solve the 1 and 2 checksum problems, before the operation of the classmate Manual check, the accuracy is very low, and often have a customer service to find I said that there is a user feedback language inaccurate or a language use will suddenly crash, and then was dragged by hand, hundreds of thousands of translation Manual Check the head on the big.
Manual is not natural to think of automated calibration, after analysis of 1, 2 problems I think through automated calibration is feasible, and can significantly improve the efficiency of the project. project design:
The first thought is to use the HTML+JS solution, so that the entire project team can be used, and very convenient. Can also be written as an Android project, the handset side direct checksum. The first two can solve the problem, but only do the automatic verification, but did not do automated validation, and then decided to use the Python script to resolve, continuous integration through the Jenkins directly invoke the Py script, very convenient. Problem Solving:
Say dry, first we analyze the process to be implemented:
Other modules are very basic processing, using the requests, ZipFile, xml.dom.minidom these modules
I will highlight the process of parsing and validating.
The XML format is consistent with Android's resource format and is a standard XML language
<resources>
<string name= "Selector_title" >choose%1$d-%2$d photo (s) </string>
...
...
</resources>
Since the checksum is required to load all, so using DOM parsing, Python provides us with the Xml.dom.minidom module, we need to get the name and value values above, and then use a dictionary as the storage structure:
def changexmltodict (_path):
dict = {}
domtree = Xml.dom.minidom.parse (_path);
Collection = domtree.documentelement
strings = Collection.getelementsbytagname ("string") for
s in strings:
dict[s.attributes.get (' name '). value] = s.firstchild.data return
dict
Convert all the XML files, the next is the verification module implementation, we need to implement the following two logic: to find the key value of the most XML file, as the parent file, the other files in turn and this file to traverse all file value, verify the correctness of%s format character channeling
1 logic is very simple, Python provides the Max function, you can calculate the number of XML keys, and then take out the comparison of key and the parent file key to determine the existence of OK.
def checklack (MAX_PATH, Cur_path):
l_result = []
D0 = changexmltodict (MAX_PATH)
D1 = changexmltodict (cur_ Path) for
k,v in D0.items ():
if k to D1:
l_result.append (k) return
L_result
2 logic is not difficult, directly through the regular judge every value on the OK
def checkvalidate (Cur_path):
l_result = []
flag = True
D0 = changexmltodict (cur_path) for
k,v in D0.items ():
If not Re.findall (' \d+ (%\s+) ', v). __len__ () = = 0:
l_result.append (k)
flag = False
return flag,l_result;
And then the last step, to generate HTML, the way I use it is direct code substitution:
basehtml = ' '
Of course, you can also use what jinia2 these frameworks.
Generated HTML report
Results:
Cough, the second column of the HTML report table is the missing field, analysis of these key values found to be a version of the online function, because too late to translate hastily on the line caused by the lack of integrity, the results came out after I and products are stunned.
The third column is a translation company%s checksum exception, basically a field on behalf of a module, I verified the next these, the module under the specific language gorgeous crash, this did not dare to say out, estimated will be beaten, hurriedly secretly change the bug to ... Continuous Integration:
Run Needless to say, the execution of the time only need to use the Jenkins to execute the entry function of the code can be
trigger conditions can be defined according to the version number of the interface, when the need for client updates, the interface will be issued version versions, Jenkins can set the time to check the timing of polling, When version number > last build saved version, the test is performed.