• How to get the testId generated by Visual Studio in a .loadtest file

    Published by jpgarcia on October 17th, 2007 4:14 pm under Testing

    No Comments

    During these days I have been working on a tool that automates the execution of a load test.

    Our objective was to parse a .loadtest template file, based on a template, which has been configured for a specific scenario with a set of counters. Once we have parsed the template we are ready to add the TestMix node and a TestProfile node for each test that we want to execute from those defined on test assembly.

    The Obstacle

    When I was creating the TestProfile node, I realized that each unit test has an specific Id (represented by a unique identifier a.k.a Guid). What I didn’t noticed until we’ve run the load test is that this identifier was generated dynamically by Visual Studio.

    We tried going under the hood , unluckily, using reflector to analyze some of Visual Studio assemblies in order to find how these identifiers were generated.

    The suggested workaround

    Searching on the web I found a post with a method which generates the Guid we’re looking for:

    private static Guid GetGuidFromString(string value)
    {
        SHA1CryptoServiceProvider provider = new SHA1CryptoServiceProvider();
        byte[] buffer1 = provider.ComputeHash(Encoding.Unicode.GetBytes(value));
        byte[] buffer2 = new byte[0x10];
        Array.Copy(buffer1, buffer2, 0×10);
        return new Guid(buffer2);
    }

    Using the recently created function we’re able to retrieve the Guid for a given assembly as I’m showing below

    private static IList<TestEntry> GetUnitTests()
    {
        IList<TestEntry> unitTests = new List<TestEntry>();
        Assembly assembly = Assembly.LoadFrom(“Tests\\PerformanceTests.dll“);
        Type[] assemblyTypes = assembly.GetTypes(); 
     
        foreach (Type type in assemblyTypes)
        {
            if (type.IsClass && 
                type.GetCustomAttributes(typeof(TestClassAttribute), false).Length > 0)
            {
                MethodInfo[] info = type.GetMethods(); 
     
                foreach (MethodInfo m in info)
                {
                    if (m.GetCustomAttributes(typeof(TestMethodAttribute), false).Length > 0)
                    {
                        Guid testGuid = GetGUIDFromString(type.FullName + “.“ + m.Name);
                        unitTests.Add(new TestEntry(testGuid, m.Name));
                    }
                }
            }
        } 
     
        return unitTests;
    }

    Hope you find it useful!

  • Leave a comment

    Your email address will not be published.

Map

Locations of visitors to this page
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); var pageTracker = _gat._getTracker("UA-491797-5"); pageTracker._trackPageview();