» »

Avtomatično prepoznati POST spremenljivke

Avtomatično prepoznati POST spremenljivke

JanVid86 ::

Imamo produkt, spletno aplikacijo, ki je v fazi testiranja. Radi bi avtomatizirali določene scenarije za kar potrebujemo avtomatično postanje forma. Samo po sebi to sicer sploh ni problem narediti, pač ugotoviš katere vairable je potrebno setirati in narediš post. Vendar bi radi imeli možnost avtomatično prebrati POST spremenljivke, ko prvič prebereš stran. Torej dobiti stran in izlistati POST variable, da se lahko potem to v testni aplikaciji popolni in zavtomatizira. Očitno se ne znam jasno izrazit zato bom podal primer (morda ravno zaradi tega ne najdem nič na googlu):

forma A, ki jo je treba avtomtizirati, vsebuje eno select kontrolo (drop down) id=dropdown1 in tri tekstovna polja: input type=text, textid1, textid2, textid3

torej da se form A posta, ni noben problem, zgeneriramo en http request z naslednjimi spremenljivkami: &dropdown1=val&textid1=text1&textid2=text2&textid3=text3

Vendar bi radi da naša windows aplikacija avtomatično "zazna" zgoraj omenjen POST spremenljivke in nam jih izpiše. Problem je v tem da ima lahko naša aplikacija v določenih primeri tudi nek hash in še neke stvari ki se morajo postati zraven, včasih pa ne.

Jezik je .NET. Na roko ne bi radi parsali HTML. Ali ima kdo s tem izkušnje ali kakšno idejo? Ali obstaja že kakšna knjižnica ki to dela?

Hvala za nasvete

BlueRunner ::

Nič ne najdeš, ker očitno nimaš pojma kaj delaš in s čim delaš.

Tukaj imaš dokumentacijo, notri je koda, ki počne to, kar iščeš. Čeprav glede na znanje, ki ga apliciraš v tem projektu, si bi verjetno zaslužil kašnih 5 let prisilnega Perl-a in vsaj 30 dni strogega ročnega prepisovanja RFC-jev povezanih s HTTP protokolom.



Amateur night, obviously.

Zgodovina sprememb…

JanVid86 ::

Verjetno si prevec genialen da bi te en programercek kot sem sam lahko razumel, zato te prosim da mi se malo pomagas, ti bom zelo hvalezen. Glej, to kar si ti postal je HttpRequest, jaz pa imam Windows aplikacijo ki je namenjena testiranju in se obnasa kot klient. To pomeni (no, mogoce se motim) da ne morem uporabiti HttpRequest classa da bi dobil POST variable. Pa ce se tako buljim v dokumentacijo. Tudi mi ni cisto jasno kaj mi bo prineslo branje RFC-jev.

Jaz imam preprosto klientsko windows aplikacijo in ne ASP .NET aplikacijo. Moja aplikacija bo generirala requeste za ASP .NET aplikacijo ki bo testirana. Potrebujem tocno to kar si mi ti napisal, BlueRunner, ampak to moram dobiti na klientski aplikaciji


Torej glej, jaz imam tole, rabim pa iz tega responsa seveda dobiti collection POST variablov, da lahko ponudim testerju da jih popolni in potem shrani da potem zavtomatiziramo proces:

HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create("http://localhost:4343/mojaforma.aspx");
WebReq.Method = "GET";
WebResp = (HttpWebResponse)WebReq.GetResponse();
Stream Answer = WebResp.GetResponseStream();
StreamReader _Answer = new StreamReader(Answer,Encoding.UTF8);
string HTML = _Answer.ReadToEnd();
WebResp.Close();

JanVid86 ::

ok ... naj vprasam drugace. Imas formo. Ne ves kako izgleda in katera polja ima. Napisati hocem testnega klienta ki bo simuliral uporabnika, stran dobil od serverja in avtomaticno generiral POST z dummy podatki. Kako v .NET brez da bi na roko parsal HTML?

arjan_t ::

v dobljenem html-ju poiščeš formo (< form>) in input-e ki jih vsebuje

JanVid86 ::

ja to mi je jasno. Ampak ne bi rad na roko parsal HTML-ja. .NET namrec tak parser gotovo ze vsebuje, ker imas v Asp .NET aplikaciji na voljo Request class ki nosi collection vseh POST atributov. Samo ne vem kako globoko v stack-u je ta parser in ali ga v klientski aplikaciji sploh lahko uporabim? Rad bi videl en primer kako se to dela, skoraj 100% sem da je to moral ze kdo narediti.

arjan_t ::

tisti request class "parsa" request ne pa html-ja

JanVid86 ::

OK, torej kot vas razumem ne obstaja nek lažji način od tega, da na roko parsam HTML. No, hvala vseeno.
@BlueRunner: glede na izjemno prepotenten pritop k mojemu postu, še vedno upam da se boš ravno ti česa pametnega spomnil seveda. Vnaprej ti bom hvaležen.

sicer pa hvala vsem za odgovore

misek ::

JanVid86, zakaj pa v svoji aplikaciji enostavno ne uporabiš kakšen WebBrowser Class ali activex ali kaj podobnega? Potem pa z njim manipuliraš.

Nekako takole (primer v VB6):
With WebBrowser.Document
    .getElementById("userID").Value = "Uporabnik"
    .getElementById("password").Value = "Geslo"
    .getElementsByName("submit").Item(0).Click
End With

BigWhale ::

Ti bi rad, da tvoj testni program odpre web stran, ugotovi kaj mora vsebovati HTTP POST in potem to posta. Rad bi genericni program za test prakticno katerekoli forme?

Mnja, kako bos pa vedel kaksne podatke vpisat v formo, ce ne bos ze kje prej naredil nekega 'seznama' vseh moznih form in stvari, ki morajo biti not vpisane?

fiction ::

Po mojem mnenju je taksen pristop testiranja konceptualno zgresen. Ti testiras neko kodo na strezniku,
ne pa to ali HTTP requesti normalno delujejo (kar je naceloma itak vedno res). Torej testni primeri se morajo dogajati na strezniku (magari simuliras kot da je nekaj prislo od uporabnika ceprav ni), ne pa da simuliras clienta (to je tezje in manj zgovorno).

Ce zelis preveriti prikaz, torej ce spletna aplikacija res dela v razlicnih brskalnikih (kar je drugo kot tisto kar hoces ti), lahko uporabis npr. Selenium.

Kar hoces narediti je se najbolj podobno "fuzzingu" - varnostnemu testiranju na podlagi raznih nakljucnih vhodov. Pri tem nimas pojma kako aplikacija deluje (zate je to nek black-box).
Pri programih hoces ponavadi z nekim cudnim inputom povzrociti, da se le-ta sesuje (torej gledas kaj bi kot napadalec najlazje lahko izkoristil, ne najdes pa drugih problemov). Ce imas kaj vec znanja (ves kako deluje aplikacija deluje oz. imas source) lahko poskusis za vec rezultatov kaksno bolj "pametno" metodo testiranja. Web-fuzzing je naceloma lazji ker lahko iz HTML-ja dobis vhodne parametre, ampak v vsakem primeru bos moral (kakorkoli ze) to sparsati ven ali pa specificirati ob zagonu testnega programa.

Streznik dobi vrednosti v obliki HTTP requesta (nic ne gleda HTML-ja!). Pri GET mora sparsati query string, pri POST mu pa se to ni treba. Samo tista vsebina, ki jo potem izpljune in poslje odjemalcu, ki je to zahteval je lahko npr. HTML. In "submit" na neki formi v brskalniku uporabnika spet lahko povzroci nek HTTP zahtevek na streznik na kar streznik (spet) odgovori z neko vsebino.

Zgodovina sprememb…

  • spremenil: fiction ()

BigWhale ::

Ja. Sploh odvisno kaj testiras. Za regression/unit teste imas vnaprej predvidene test case narjene. Kjer ves kak mora bit output glede na dani input.

AnonimkeOP ::

hmm kot si napisal, mislim da ne obstaja drug nacin kot da na roko parsas HTML. Poglej ce obstaja kaksna knjiznica ze na netu.
www.anonimke.com


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C# asp.NET web forma] Kam zgine cookie oz. zkj se izbriše?

Oddelek: Programiranje
61035 (849) Morenov
»

ASP.NET + C# vprašanje

Oddelek: Programiranje
342653 (1667) Morenov
»

[C#] Simobilov Glasnik

Oddelek: Programiranje
134178 (1258) Mrch
»

[C#] WebResponse vrne error 404

Oddelek: Programiranje
5964 (925) darkolord
»

HTTP POST

Oddelek: Programiranje
231671 (1447) kopernik

Več podobnih tem