Fluentbytes

The only source of knowledge is experience

Page 4 of 16

Sessions VSLive Las Vegas

HI, thanks for all that attended my sessions at VSLive this week in Las Vegas. I hope you enjoyed the sessions and if you have questions left, please reach out to me on twitter (@marcelv) or ask them here below in the comments section.

WP_20150316_08_36_36_Pro

If you want to have a look at the slides ore want to use the demo’s your self, you can find them here below.

T23 Automated Cross Browser Testing of Your Web Applications with Visual Studio CodedUI

Slides

Demos

W05 Using Microsoft Application Insights to Implement a Build, Measure, Learn Loop

Slides

Demos: no demo’s to share, just new up a ASP.NET project and work it from there.

W30 Advanced Modern App Architecture Concepts

Slides

Mobile Workshop: Native Mobile App developement for iOS, Android and Windows using C#

For the one day mobile workshop, you can find those back on the VSLive download portal. Details on where the portal is and login details are in your VSLive conference book.

Cheers,

Marcel

Hosting CodedUI in your Wpf Application

Today I was asked an interesting and challenging question regarding CodedUI. We are working on some code that a colleague of mine wanted to test with Spec flow and CodedUI. The challenge was that in the spec flow test they created an instance of some WFP UI components that are part of the application and they wanted to use CodedUI to validate the behavior.  So this means the applciation under test is the test itself, since that is hosting the control.

So Why is this challenging, you might ask? Well there are a couple of things that will bite you when you try this and you need to get them solved first, hence my post to directly show you the solution 🙂

To simplify the scenario and show what you need to do, I created a simple test application that creates a Wpf Window. In this window I created 2 buttons. The first button is the button I will use to activate the CodedUI code (this is the spec flow code in our real life scenario) and one other button that CodedUI code will click after I clicked the “click Hello Automated” button. I called the second button “Hello”.

Here is a screenshot of the applciation:

image

Now to get started, You need to add quite some references to assemblies to get CodedUI to run within your application. Therese references don’t seem all to obvious, but without them, your code will crash at runtime with Assembly type load exceptions.

You need to reference the following set of assemblies: (I have them in the format, so you can copy and paste them straight into your csproj file, after unloading it in the ide, to save you some time)

<Reference Include=”Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL” />
<Reference Include=”Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL” />
<Reference Include=”Microsoft.VisualStudio.QualityTools.WindowsStore.CodedUITestFramework, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL” />
<Reference Include=”Microsoft.VisualStudio.TestTools.UITest.Extension, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL” />
<Reference Include=”Microsoft.VisualStudio.TestTools.UITest.Framework“>
<HintPath>..\..\..\..\..\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies\Microsoft.VisualStudio.TestTools.UITest.Framework.dll</HintPath>
</Reference>
<Reference Include=”Microsoft.VisualStudio.TestTools.UITest.Playback“>
<HintPath>..\..\..\..\..\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies\Microsoft.VisualStudio.TestTools.UITest.Playback.dll</HintPath>
</Reference>
<Reference Include=”Microsoft.VisualStudio.TestTools.UITest.WindowsStoreUtility“>
<HintPath>..\..\..\..\..\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies\Microsoft.VisualStudio.TestTools.UITest.WindowsStoreUtility.dll</HintPath>
</Reference>
<Reference Include=”Microsoft.VisualStudio.TestTools.UITesting, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL” />

Next we need to write some code to click the button.Since we are not part of a classic CodedUI test, we need to initialize the payback engine ourselves first. so therefore we start with a call the Playback.Initialize().

Next we need to find the application under test, and this is our own process. Therefore I used the environment class Process to get the current running process information and that we can pass to the ApplicationUnderTest and attach to it. With this we now have a search scope for all CodedUi controls we want to find. Then you create a WpfButton and pass it the search criteria how to find the button. I have done this by searching on the x:name property of the xaml control. Here is the code:

Now you normally would just call this method from the event handler of our button. But if you do this the code will not run properly. this has to do with the fact that the event handler of the button click that would activate our code, runs on the UI thread. CodedUI will create a “search” control that will then search for the UI control on the screen, but on the same UI thread that needs to receive the input of the mouse click.  So we will block the UI thread until we would be done, blocking it from getting the codedUI input.

There is an easy fix for that, and that is to move the code to a background thread, enabling the UI thread to receive input.

So the event handler now looks as follows:

The final result now looks as follows:

Untitled

You see me click the activation button, then coded UI will click the Hello Button and then the Message box pops up.

All in all not the most complicated code you have ever seen I think, but still there where at least two things that where less obvious I think. First to initialize the playback engine and second the threading issue. (besides finding all the assemblies you need to reference, which is an annoying and time consuming task :-))

Hope this helps!

Tweaks after setting up a Mac Book Pro with boot camp as a Windows machine

For a couple of weeks I have a Mac Book Pro as my main workstation. For my work I need to spend quite some time in Windows and only for my cross platform mobile app development with Xamarin I need the Mac Book, so I can develop iOS applications. The past weeks I have been using Parallels virtualization, but when you use it for Windows phone development, you need to enable nested virtualization and then unfortunately the machine has strange lags and is sometimes extremely slow.

One thing I wanted to try out today was to setup Parallels in a different way, using a boot camp partition. Here you install windows on your bare metal using the Apple provided boot camp options.

I must say, installing with boot camp was overall a smooth install, no strange issues I needed to solve. Just a couple of tweaks that I summarize below:

Change the scroll direction on the boot camp windows machine

Only a few things I got used to the past weeks on the Mac Book I really love where the way the track pad works. One thing is natural scrolling, which I got used to in such a way that I could not work with the reverse scroll anymore on windows.

To fix the scroll directions, there is a simple registry key you can set.

Here is the Power Shell command you can use (in admin mode!)

Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Enum\HID\*\*\Device` Parameters FlipFlopWheel -EA 0 | ForEach-Object { Set-ItemProperty $_.PSPath FlipFlopWheel 1 }

After rebooting, your windows will scroll in natural scroll mode, just as on Mac OS

Slowing down the scroll speed on the boot camp windows machine

The track pad now works, but the scroll speed is way to fast, at least for me it is. The way to slow down scrolling on the track pad is by changing the mouse settings in the control panel.   Go to the control panel, type in the search keyword, mouse and then select “change mouse settings”

Here you select the tab wheel and set the number of lines to a lower value. for me 1 works best as shown in the screenshot:

image

Enabling Hardware virtualization on your boot camp windows machine

This one is in the category don’t ask how it works, but it works.

If you first boot into your boot camp partition, you can not enable Hyper-V. reason is that the hardware virtualization is disabled and you normally need to enable this in the PC bios. In this case you need to take the following steps:

restart your machine and use the option key at startup to select the OS-X partition and boot into the Mac OS again. there go to the System preferences and then to the Startup disk option. Then you select your boot camp partition and click reboot.

Now windows starts again, and if you look at the processor information, you can now see the hardware virtualization is enabled.

image

With this fix I was able to enable Hyper-V, and enable Visual studio to install the phone emulator image and start working on Windows Phone projects again

Hope this helps.

How to unblock an Azure VM that is stuck in the starting state?

today I got hit by some serious outage on Microsoft Azure, that caused a couple of my virtual machines to be stuck in the starting stage. the problem was that there is just no way to fix this problem by using the simple tools you get in the azure portal. My servers that I use for demo purposes, needed to be up, since I was going to demo a lot of stuff in the afternoon at my Visual Studio Live! talks in Orlando.

My VM dashboard looked like this when I looked this morning:

Azure VM stuck in starting

So the question is, how the heck can you unblock these machines in this starting state, since they have been there for hours, so they are not actually starting.

the only way to fix this, was either delete the VM’s and be carful to keep the disks when deleting, or use PowerShell to stop the VM’s. Interestingly enough you can do a lot more with PowerShell then with the portal and I thought that might be the easiest way to get going again.

But since I most o the time just use the portal, I had not done any PowerShell on my brand new laptop. I think it is nice to go through the step by step process of what I needed to do in order to get things going again.

So first I needed to get the Azure PowerShell environment. The Azure PowerShell command lets are available for download, but I just got the whole package using the Windows Platform installer.

Here I selected the Azure Power tools and after that install I started a fresh command prompt.

Next I wanted to issue the Stop-AzureVM command, but in order for that command to succeed, you need to set up your subscription first.

For that you start with the command:

Add-AzureAccount.

This command will create an UI prompt to log you on with your Azure credentials and after this succeeds you will see your subscriptions listed associated with your account.

image

If you have multiple subscriptions, you need to check which subscription was selected as your default. In this case  I needed to select the right subscription. For this you use the command:

Select-AzureSubscription and you provide it the subscription name.

Now the default subscription is set for all subsequent azure commands.

Now I could finally issue the Stop-AzureVM command and there you need to provide it a couple of parameters. Fist you need to give it the name of the VM, tha tis easy since it is the name you see in the portal. The second question is the name of the service. The name of the service apparently is the name of the DNS for that machine, without the cloudapp.net part. So for my TFS azure machine that is called FluentbytesTFS, this was fluentbytesdc, as you can see in the picture here below.

image

 

After issuing the Stop-AzureVM command, I was able to use the portal again to start the VM’s. This time they started and all was well again.

Hope this helps you when you get your VM’s stuck, I had to search in multiple places to figure out how to make it work again.

cheers,
Marcel

Error connecting xamarin iOS build host. Parameter name: must be between 0 and 65535

TLDR version: install xcode on your Mac, since it is probably not installed.

Full story:

Today I spend about an hour getting things up and running because I kept running into problems getting visual studio to pair with the build host.

This is one of the things that you need to set up when you want to build iOS applications with Xamarin and Visual Studio, is the build host that runs on a Mac. 

I had installed Xamarin studio on my MacBook and windows running in Parallels. Started the build host and then clicked the button to pair, giving me a PIN number to use to pair Visual Studio with the build host.

But the Visual Studio pairing dialog kept telling me the PIN number was incorrect, even after copying and pasting it from the build host control into the connection dialog.

When running Diagnostics I saw it kept failing on connecting to the build host. Connectivity to the mac was ok, but the build host could not be reached. I tried of course many things, turning of the fire wall being e.g. one of the things I tried.

When looking at the details, I kept getting the diagnostics failing with a cryptic message. The message was:

Parameter name: must be between 0 and 65535

Almost ready to pull my hair out I got one moment of enlightenment. What I did is that I started xamarin studio on my MacBook and there tried to build an iOS app. Just to see if I could build an app and run it in the simulator, just to ensure all is good on the Mac side.

Then I tried to build the app and run it in the simulator and I got the message that XCode was not installed. And that was true, it is a brand new MacBook and after installing Xamarin I just went straight through installing the visual studio side of thing.

After installing XCode and checking I could run a simple app in the simulator, I tried reconnecting the Visual Studio environment again and voila, problem solved.

So if you get the message Parameter name: must be between 0 and 65535, chances are you haven’t fully installed everything required to run an app in the iOS simulator.

Hope that helps,

Marcel

Solving intermittent DNS issues on your custom Azure development domain

The past few weeks I have been working on my own development domain, hosted in windows azure. There is a nice step by step plan available online on how to set up a network that can host your own development machines and your own domain controller, so you can use all these machines as if they run in one domain. (http://azure.microsoft.com/en-us/documentation/articles/active-directory-new-forest-virtual-machine/)

Setting up such a domain is especially useful when you want to leverage e.g. TFS and the test tools, since these tools work best if you work in a domain joined environment.

After setting this up, all worked great and I have used it for several demos and just some average development work I do.

My network looks more or less as follows:

image

But all of a sudden last week, I ran into the problem that on any of my development machines (the test clients) could not connect to the internet anymore. Sometimes an address was reachable and all of a sudden a couple of seconds it was not possible to connect. This intermitted problem was really problematic getting any real work done these days especially when you are running tests against websites on the internet Smile

So trying to resolve the problem, I first looked at my network setup and especially DNS. Reason for me to start there is that the IE browser constantly showed the dreaded connection failed and telling me I did not have an internet connection. If you look a bit deeper, you could see it was a name resolution issue, so I started a command line and used nslookup to try to resolve names.

the results for such an lookup looked as follows:

C:\Users\marcelv>nslookup
> google.com
Server:  UnKnown
Address:  10.0.0.5

DNS request timed out.
timeout was 2 seconds.
DNS request timed out.
timeout was 2 seconds.
DNS request timed out.
timeout was 2 seconds.
DNS request timed out.
timeout was 2 seconds.
*** Request to UnKnown timed-out
>

So this confirmed to me I had a DNS problem, question next was how to resolve it. With the custom domain setup, I configured a virtual private network with the address range 10.0.0.x and since I wanted to host my own Active Directory  and you can see by the response it did pick up my DNS server. So the problem must be at the DNS server itself.

Then I looked at the DNS configuration and since it was fully functioning before, it must have something to do with a DNS setting that might have gone stale in the Azure network topology.

One of the things that is different to on premise AD is the fact that your AD machine still has an DHCP obtained address. I did pin it to a fixed address using the PowerShell command described, but still you get this address from a DHCP server.

Now looking at the configuration, I discovered that the configured forwarder, that takes care of all requests outside the local domain, was unable to resolve.

image

After posting a request on the azure forms, to get some help, I got a response that was very helpful. It pointed me to the following article: http://windowsitpro.com/windows-azure/solve-dc-name-resolution-problems-azure

This was exactly my issue, so by removing the forwarder, DNS will fall back to the root hints. Now all requests can be resolved straight away and my development machines can happily browse the web again Smile

I Assume this problem is caused by the fact that once I created this AD machine and promoted it to the AD and DNS server, it just added the DHCP server that it got it’s lease from as the default forwarder. Since I might have been moved around the datacenter during maintenance or perhaps even failover, it is very well possible this server does not exist anymore. By just removing it from the list, I have a more sustainable solution, since it will not be affected anymore by such a move in the future.

How to faster close a browser tab when using CodedUI

Last week I got contacted via twitter (@marcelv) with the a question regarding my Pluralsight CodedUI course and a previous blog post that shows how to use CodedUI to test applications that use multiple tabs in the browser.

This particular question was, how can I close the browser tab faster since using the BrowserWindow.Close() function takes a lot of time.

To give some more context, in this blog post you can read how to access a newly created browser tab in your test.

Now when you have found the new tab, you have a reference to that tab. This reference is a BrowserWindow class. This class has the close method on it, but if you call the method to close the tab, this can take quite some time. On my machine times varied between 8 and 14 seconds before the tab was closed. If you have an application that has a lot of tabs that you need to test, you can imagine test times add up quickly.

So how does the code look like if I close the tab using the BrowserWindow class

 

So what is the alternative, and how can I close the browser window in just a matter of milliseconds?

Well this is the area that CodedUI shines in my opinion (Besides the point that the close takes way to much time, which is of course not cool at all!). With CodedUI I can very easily switch UI technologies while still using the API. What I mean by that is that in stead of using the browser window and HTML controls that use the web technology driver to find element, I can just switch to using Windows Controls, that uses MSAA to access controls on a windows desktop,  and manipulate those in order to achieve my goal.

In this particular case, you need to find the tab strip in the browser window and in the tab strip find the tab you want to close. If you run your test in internet explorer, the tab contains a close button that you can then find and click.

The following lines of code achieve this goal (assuming the tab has the title “New Tab” as with the example in my previous post):

 

So what is the difference in speed her?

Well using the BrowserWindow class it took between 8 – 14 seconds to close the tab, with the alternative approach using windows controls it takes about 500ms.

there is a downside to this approach that you need to be aware of, when you run multi browser tests with the selenium plugin that MS provides via the visual studio code gallery, you need to be aware of the fact that using the BrowserWindow class works cross browser and using the alternative only works for the browser you design the close for. So if I want to achieve the same on Chrome or Firefox, then I need to figure out which windows controls they use for their tabs and how I can click the close button there as well.

Hope this helps

Marcel

How to work with symbolic link files under Linux/Unix and TFS?

With Team Explorer Everywhere you have the ability to use TFS from the command line on any Unix/Linux system. One of the features of the Unix/Linux file system is that you can use so called symbolic links. These are files that more or less work the same as a shortcut, they point to another location on the file system where you can find the actual file. You could also call it a moniker.

This type of file is often used to share a common set of files from another location in the file tree on different other locations of the file system. It is a way to handle dependencies e.g.

Lets assume you have such a system, and you want to place it under Team Foundation Server Version control, how can you make this work?

Welcome in the wonders of .tpattribute files.

.tpattribute files get their name from the early days of Team explorer everywhere, the company where this was first build. Team Prise. a .tpattributes file is just a text file that can contain the definition of a symbolic link. this definition is then used on a get operation in that workspace to be applied to a certain file so it becomes a symbolic link.

In the past (before Team Explorer Everywhere 2012) you also used these files to set for a set of files e.g. the execute bit on a get operation.

the contents of the .tpattributes file is described very shortly here: http://msdn.microsoft.com/en-us/library/gg413272(v=vs.100).aspx

Lets use an example to clarify its usage:

Lets assume we have the following symbolic link we want in our workspace:

./site/bin/site_config

It points to:

site_config -> ../client/bin/site_config

For this to happen on a TF get command, we need the .tpattributes file to contain the following information:

site_config:local-link=../client/bin/site_config

When we have created this file we check it in. But that is not all to make it work! In order to actually make the magic happen we also need a file in version control as the placeholder for the symbolic link file. Easy way to do this is by deleting the symbolic link file and then recreate a new 0 bytes file with the touch command.

then we check in the .tpattributes file and the 0 bytes placedholder file, site_config in our example case.

Now to see the magic happen, we can set up a new directory and workspace mapping and then execute a get operation on that folder. What happens is that it will get the .tpattributes file and when that is on local disk, will be used by the tfs client to apply the symbolic link to the file site_config.

So the moment you get the site_config file, team explorer will convert it to the symbolic link. this can be easily verified by executing a ls –all command and then you can see it point to another file.

This symbolic link will not be set up when the file it points to is not available.

Another thing to note is that in the past the .tpattributes file was also used to set the execute bit on files. you could do this by starting the file with e.g. the following regular expression:

.*:x

This then resulted in all files in that directory to get the execute bit applied.

Now I have experienced that sometimes when your file starts with this syntax to set the execute bit on a certain set of files, sometimes the symbolic link is not created. the solution is that you remove this part from the file. the reason that can be done is that TFS will keep track of the the execute bit status on a file and when executing an add it will add this information with the file in TFS. when you get the file on a Unix/Linux system, then TFS will restore the execute bit without the need for the .tpattributes file.

Hope this helps, I can tell you it took me quite a while to get this figured out.

I will be speaking at TechEd Europe 2014

At TechEd Barcelona this year I will deliver a talk on “Best Practices for Using OSS in the Enterprise“.

Session abstract:

Most of us understand the benefits of using open source software and libraries. Heck, even Microsoft embraces it, so why can’t you adopt it as well in your enterprise? Open source can be a blessing and a curse at the same time. We probably all remember incidents like the “heart bleed” vulnerability in a popular open source implementation of SSL. So, if open source becomes more and more prevalent, how can we cope with the challenges that lay at hand? We will be challenged with all sorts of questions in the enterprise: What are the license implications when I take a dependency on a library with a viral type of license? What version of open source libraries are we using and are they the choice of the generic public or did we select one we now need to maintain ourselves? Are there known vulnerabilities in the libraries we use, and if so, are we affected by that? In this session, we take a practical approach to using open source libraries in product development for the enterprise. We touch briefly on the license types and the ones to look out for. We show you how an artefact repository system can help you to answer a lot of the tough questions. Learn how to integrate a system that is very popular, called Nexus, in your continuous deployment strategy and ensure a frictionless experience for your developers. We show integration with NuGet and how to manage open source dependencies using proxy facilities so you can ensure only a curated set of libraries are used, and meet compliance requirements for your business.

Of course you can find me also at the ask the experts booth as well.

If you want to drop by and have a chat, my schedule looks as follows:

Tuesday, October 28
9:00 AM-10:30 AM
Keynote Session, Hall 6
11:00 AM-12:00 PM
Foundational Sessions, various rooms
6:00 PM-8:30 PM
TechExpo Welcome Reception, Hall 7

Wednesday, October 29
8:00 PM-11:00 PM
Country Drinks, Barceloneta Beach

Thursday, October 30
4:00 PM-5:00 PM
TechExpo Happy Hour, Hall 7
6:30 PM-8:00 PM
Ask the Experts, Hall 5

Friday, October 31
2:45 PM-4:00 PM
Best Practices for Using OSS in the Enterprise

Marcel

Creating a detailed test report showing results of test case steps

For a while I have been working on a fairly large implementation of Team Foundation Server. During this implementation we phase out several silo based systems, like rational tools and HPQC. Moving from HPQC to MTM and TFS has been rather easy if you understand that the two systems just have a complete other way of treating test cases and test runs. To Satisfy some end user data needs we needed to create a custom report that is similar to the reports that can be created with HPQC out of the box. This is the test detail report, which I added here below to see what it is about. clip_image002 As you can see it shows not only the test suite outcome, but also the outcome of the test case and the detailed steps and where things failed. Creating a report as above, apeared to be more challanging then I thought at first, but that has to do with the fact that the standard solution we have, don’t have all the data we need. Work item queries, don’t have test case results. The data warehouse contains data to the test case run level, but not the step details. So how can we fix this? Apparently my fellow MVP Tarun Arora (http://geekswithblogs.net/TarunArora) had an excellent post (http://geekswithblogs.net/TarunArora/archive/2011/10/02/mtm-testing-scorecard-using-tfs-api.aspx) that got me out of the gate towards a solution. What he did is just create a simple windows forms application that uses the TFS API to get to all the data. So while less ideal, we can have a solution, but unfortunately not one that integrates out of the box. So I picked up the sample code from Tarun and altered it in such a way that it would give full details on test runs and render them using an embedded report viewer control. The only alternative to get this data is using the TFS object model. In the object model I can get to all the details I need, by using the ITestManagementService. So when you want to get to the test details, you first need to understand how the relationships are set up in the API. So first let start with understanding the basics, and then dive into the solution.

1.1 TFS and MTM ITestManagementService data

To get access to the service we use the standard pattern of connecting to TFS and then requesting the service we need.

Now that I can get to the service, we need to walk the hierarchy. We have a Team Project and a Team project can have multiple test plans. A Plan has the notion of Test Suites and a suite can be either a static suite, a Query based suite or a Requirements Based Suite. Now the tricky part is that a test case is a work item that can be associated with multiple test suites and a test suite can contain multiple test cases. The following diagram shows the relationships.   image Now this model is the logical setup when you look at how you create a test plan. The moment you want to execute a test, we need to add some additional things to the mix. Test runs are a mixture of Test suites that contain test cases and based on the selected configurations we want to run for. So if you start to look at test results, the data structure is a bit more complex. So For our report to succeed, we need to retrieve the following data:

  • For a selected team project ( a dropdown selection in the tool) and a selected Test Plan (Also a drop down selection) we are going to retrieve the test suites.
  • Then for each suite we need to get the test cases and for each test case we need the test results.
  • These test results can be found by using a concept call “Test Points”. A Test Point represents a Test Case to be run against a Test Configuration in a Test Suite.

The results become even more complex, since we can execute a test that contains test cases with parameters (using the @ symbol to denote the parameters in the test steps) and this will result in multiple iterations of the same test steps. The below picture shows the result structure we need to use to get the right data: image So as you can see it involves quite some iterations to get to the final data we want. What I have done is used the solution Tarun build and extended it to support my needs. I had to alter some of the functions that get the test suite hierarchy and the actual function that retrieves the data and creates dataset that can be fed into the report viewer control. To give you an example of the results, I have a couple of screenshots to show you how it looks. You first create a test plan in MTM, like this: clip_image008 You can see I have a test plan with several test cases in there and I ran a set of manual tests so all my tests have some test results associated. Now when you start the report tool, you need to connect to your TFS server image After you connect, you select the team project and the plan you want to view the results from. image When you selected them, click the generate report button, and it will get the data from TFS image Next you can see the detailed report with all test suites, test cases per suite, per test case the iterations and per iteration the test steps and the result of each step. As a bonus, I added also the capability that when you are using parameters in a test case and have multiple iterations on a test run, you get the parameter values that were used in a run as well. Smile clip_image016 I thought it might be useful for others to use as well, so I placed this work on codeplex. Now everyone can contribute. The codebase is not the greatest code in the world, but it gets the job done for me at the moment. Feel free to make changes and tidy things up as you use the tool yourself. I love contributions Smile You can find the project here: https://tfstestreport.codeplex.com/ If you want to join, please let me know and provide me your login name at codeplex when requesting. Hope this helps, Marcel

« Older posts Newer posts »

© 2025 Fluentbytes

Theme by Anders NorenUp ↑