void exec(TestData testData, TestLogger.TestLogger log, bool summary = true)//load dll file, and let the dll file run the test, write the log
 {
     changename(testData);
     try
     {
         Assembly assem = Assembly.LoadFrom(testData.repo + testData.testDriver);
         Type[]   type  = assem.GetExportedTypes();
         foreach (Type t in type)
         {
             if (t.IsClass && typeof(ITestInterface).IsAssignableFrom(t))
             {
                 ITestInterface tdr = (ITestInterface)Activator.CreateInstance(t);    // create instance of test driver
                 foreach (string lib in testData.testCode)
                 {
                     log.writeLine("test library is " + lib);
                     Console.WriteLine(tdr.getLog());
                     Console.WriteLine("--------this is for requirement 5-------\r\n Calling ITestInterface Test()");//this is just for demo
                     if (tdr.Test() == true)
                     {
                         log.writeLine("Test result : pass"); Console.WriteLine(" test() return true");
                     }
                     else
                     {
                         log.writeLine("Test result : fail"); Console.WriteLine(" test() return false");
                         summary = false;
                     }
                 }
             }
         }
         if (summary == true)
         {
             log.writeLine("Summary : pass\r\n\r\n\r\n");
         }
         else
         {
             log.writeLine("Summary : fail\r\n\r\n\r\n");
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(" catch error");//this is just for demo use
         log.writeLine("error: " + ex.Message);
         log.writeLine("time: " + DateTime.Now);
         log.writeLine("Summary : not execuatable\r\n\r\n\r\n");
     }
 }