1
+ const { parseString } = require ( 'xml2js' ) ;
2
+ const request = require ( 'request' ) ;
3
+ const submitTestLog = async ( requestData , projectId , qTestConfig ) => {
4
+ await new Promise ( ( resolve , reject ) => {
5
+ request ( {
6
+ uri : `${ qTestConfig . qTestUrl } /api/v3/projects/${ projectId } /auto-test-logs?type=automation` ,
7
+ method : 'POST' ,
8
+ headers : {
9
+ 'Authorization' : `bearer ${ qTestConfig . token } ` ,
10
+ 'Content-Type' : 'application/json' ,
11
+ 'accept' : 'application/json'
12
+ } ,
13
+ body : requestData
14
+ } , ( err , res , body ) => {
15
+ if ( err ) { return reject ( err ) ; }
16
+ console . log ( body ) ;
17
+ resolve ( true ) ;
18
+ } ) ;
19
+ } ) ;
20
+ }
21
+ const submitTestResults = async ( event , qTestConfig ) => {
22
+ let resultData = await new Promise ( ( resolve , reject ) => {
23
+ parseString ( event . result , ( err , result ) => {
24
+ if ( err ) {
25
+ reject ( err ) ;
26
+ }
27
+ resolve ( result ) ;
28
+ } ) ;
29
+ } ) ;
30
+ let testCases = resultData . testsuite . testcase ;
31
+ let requestData = {
32
+ name : event . jobName ,
33
+ test_logs : [ ] ,
34
+ test_cycle : event . testcycle
35
+ } ;
36
+ for ( let i = 0 ; i < testCases . length ; i ++ ) {
37
+ let testCase = testCases [ i ] [ '$' ] ;
38
+ let status = 'PASS' ;
39
+ if ( testCases [ i ] . failure ) {
40
+ status = 'FAIL' ;
41
+ }
42
+ if ( testCases [ i ] . skipped ) {
43
+ status = 'SKIP' ;
44
+ }
45
+ requestData . test_logs . push ( {
46
+ status : status ,
47
+ // set start and end date to current time
48
+ exe_start_date : new Date ( ) ,
49
+ exe_end_date : new Date ( ) ,
50
+ name : testCase . name ,
51
+ automation_content : `${ testCase . classname } .${ testCase . name } ` ,
52
+ module_names : [ 'Automation Module' ]
53
+ } ) ;
54
+ }
55
+ await submitTestLog ( JSON . stringify ( requestData ) , event . projectID , qTestConfig ) ;
56
+ } ;
57
+ const triggerSlackWebhook = async ( webhook , content ) => {
58
+ await new Promise ( ( resolve , reject ) => {
59
+ request ( {
60
+ uri : webhook ,
61
+ method : 'POST' ,
62
+ json : { text : content }
63
+ } , ( err , res , body ) => {
64
+ if ( err ) { return reject ( err ) ; }
65
+ resolve ( ) ;
66
+ } ) ;
67
+ } ) ;
68
+ } ;
69
+ exports . handler = async ( event , { clientContext : { constants, triggers } } , callback ) => {
70
+ await submitTestResults ( event , { qTestUrl : constants . qTestUrl , token : constants . qTestToken } ) ;
71
+ await triggerSlackWebhook ( constants . SlackWebhook , 'Created test case in qTest Manager' ) ;
72
+ console . log ( 'Done processing test results.' ) ;
73
+ }
0 commit comments