Post test data to ASP.NET website

You may have to test a simple web page to  make sure the web page is working fine. the page may only have few controls, like two text boxes and one button. If one textbox is set to a specific value, once you click on the button, the other text box may get a defined value, then you could check the response string for the defined value to check wether if works as expected.

1. Give test data and expected tag, check wether the tag is in the response string.

2. Encode specific characters by HttpUtility.UrlEncode, this class defined in System.Web.dll.

3. Get the VIEWSTATE and EVENTVALIDATION using code.

Code as below:

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Web;
using System.Net;  //webClient
//ausing System.Web.Util; //HttpUtility.UrlEncode


namespace WebNetTestFramework
{
    public class WebTestClass
    {
        public static bool ResponseContainsTag(string uri, string postdata, string expectedtag)
        {
            //Handle Post Data
            byte[] data = Encoding.ASCII.GetBytes(postdata);

            //Create instance of request
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded";
            req.ContentLength = data.Length;
            Stream st_wr = req.GetRequestStream();
            st_wr.Write(data, 0, data.Length);
            st_wr.Flush();
            st_wr.Close();

            //Create instance of response
            HttpWebResponse res = (HttpWebResponse)req.GetResponse();
            Stream st_rd = res.GetResponseStream();
            StreamReader sr = new StreamReader(st_rd);
            string responseString = sr.ReadToEnd();
            sr.Close();
            st_rd.Close();

            //Test wether contains the expected tag
            if (responseString.IndexOf(expectedtag) >= 0)
                return true;
            else
                return false;
        }

        public static string GetViewState(string uri)
        {
            try
            {
                WebClient webClt = new WebClient();
                Stream st = webClt.OpenRead(uri);
                StreamReader sr = new StreamReader(st);
                string responseString = sr.ReadToEnd();
                int startVS = responseString.IndexOf("__VIEWSTATE"0);

                string vs = string.Empty;
                if (startVS > 19)
                {
                    int startVSValue = responseString.IndexOf("value=", startVS) + 7;
                    int endVSValue = responseString.IndexOf("\"", startVSValue);
                    vs = responseString.Substring(startVSValue, (endVSValue - startVSValue));
                }
                else
                    vs = "Viewstate Not found";
                return "__VIEWSTATE="+vs;
            }
            catch
            {
                throw new Exception("Fatal error finding viewstate");
            }
        }

        public static string GetViewStateAndEventValidation(string uri)
        {
            try
            {
                WebClient webClt = new WebClient();
                Stream st = webClt.OpenRead(uri);
                StreamReader sr = new StreamReader(st);
                string responseString = sr.ReadToEnd();
                int startVS = responseString.IndexOf("__VIEWSTATE"0);

                string vs = string.Empty;
                if (startVS > 19)
                {
                    int startVSValue = responseString.IndexOf("value=", startVS)+7;
                    int endVSValue = responseString.IndexOf("\"", startVSValue);
                    vs = responseString.Substring(startVSValue, (endVSValue - startVSValue));
                }
                else
                    vs = "Viewstate Not found";

                string ev = string.Empty;
                int startEV = responseString.LastIndexOf("__EVENTVALIDATION"0) + 49;
                if (startEV > 48)
                {
                    int startEVValue = responseString.IndexOf("value=", startEV) + 7;
                    int endEVValue = responseString.IndexOf("\"", startEV);
                    ev = responseString.Substring(startEVValue, (endEVValue - startEVValue));
                }
                else
                    ev = "Eventvalidation Not found";
                return "__VIEWSTATE=" + vs + "__EVENTVALIDATOIN=" + ev;
            }
            catch
            {
                throw new Exception
                ("Fatal error finding viewstate or eventvalidation");
            }
        }

        //Transform special characters like "&"->"%26"
        public static string EncodeValue(string value)
        {
            return HttpUtility.UrlEncode(value);            
        }
    }
}
原文地址:https://www.cnblogs.com/qixue/p/2338250.html