\documentclass{beamer}

% \usetheme{Darmstadt}
% \usefonttheme[onlylarge]{structurebold}
% \setbeamerfont*{frametitle}{size=\normalsize,series=\bfseries}
% \setbeamertemplate{navigation symbols}{}

\setbeamerfont{example}{series=\bfseries,size=\small}


\usepackage{beamerthemesplit}

\usetheme{AnnArbor}

\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage{times}
\usepackage[T1]{fontenc}

% Setup TikZ

\usepackage{tikz}
\usetikzlibrary{arrows}
\tikzstyle{block}=[draw opacity=0.7,line width=1.4cm]


\title{Tests de montée en charge avec Tsung}
\author{Rodolphe Quiédeville}
\date{17 octobre 2008}

\institute[Bearstech]
{
  10e Journées Du Logiciel Libre
  \and
  \vskip-2mm
  Lyon
}

% Begin document
\begin{document}

\frame{\titlepage}

\section{Introduction}
\frame{\tableofcontents}

% First page

\subsection{Bearstech}
\begin{frame}
\begin{itemize}
\item Hébergements à valeurs ajoutés
\begin{itemize}
\item Événementiel (SFR, Inrocks, ...)
\item Multiplateforme (PHP, Python, Ruby, ...)
\end{itemize}
\item Recherche et développement
\begin{itemize}
\item Hackable devices
\item Openmoko
\item Green IT
\end{itemize}
\end{itemize}
\end{frame}

%

\subsection{Moi et mon ego}
\begin{frame}

  \begin{itemize}
  \item Administrateur système et réseaux
  \item Logiciel libre et uniquement cela depuis 10 ans
  \item Chez Bearstech depuis 6 mois
  \item Relié au net 360 jours par an
  \item Debianiste convaincu
  \item Emacsien devant l'éternel
  \end{itemize}

\end{frame}


%%%%%%% 

\section{Tsung}
\subsection{Présentation générale}

\begin{frame}

Parlons de Tsung

  \begin{itemize}
  \item Projet Libre GPL v2
  \item 7 ans
  \item Ecrit par Nicolas Niclausse
  \item Né chez Idealx (IDX-Tsunami), Jabber
  \item Erlang
  \item 1.3.0 septembre 2008
  \end{itemize}

\end{frame}

\begin{frame}

Dans la technique

  \begin{itemize}
  \item Multi-protocole (jabber, HTTP, PostgreSQL et MySQL, ...)
  \item Distribué
  \item Hautes performances (10k users, Gigabit, ...)
  \item Support SSL
  \item Multi IP par client (passage de load-balancer, ...)
  \item Configuration par fichier XML
  \item Scénarios dynamiques
  \item Répartition non linéaire
  \end{itemize}

\end{frame}

\begin{frame}

Coté HTTP

  \begin{itemize}
 \item HTTP/1.0 et HTTP/1.1
 \item GET, POST, PUT, DELETE et HEAD
 \item Gestion automatique des Cookies
 \item Sait faire du 'GET If-modified since'
 \item WWW-authentication Basic 
 \item Mode Proxy pour enregistrer un scénario
 \item SOAP
 \item HTTP server or proxy server load testing.
  \end{itemize}

\end{frame}

\subsection{Le fichier de configuration}
\frame
{
  \frametitle{Les sections}

  \begin{itemize}
  \item Les clients
  \item Les serveurs
  \item La charge
  \item Les options
  \item Les sessions

  \end{itemize}
}

\usebeamerfont{example}

% clients
\begin{frame}[fragile]{Les clients}
\begin{verbatim}

<!-- Client side setup -->
<clients>

 <client host="tsung0" />

</clients>

\end{verbatim}
\end{frame}


% clients
\begin{frame}[fragile]{Les clients}
\begin{verbatim}

<!-- Client side setup -->
<clients>

 <client host="ts1" weight="1" maxusers="800">
  <ip value="10.9.195.12"></ip>
  <ip value="10.9.195.13"></ip>
 </client>

 <client host="ts2" weight="3" maxusers="600" cpu="2">
  <ip value="10.9.195.14"></ip>
 </client>

</clients>

\end{verbatim}
\end{frame}

% servers
\begin{frame}[fragile]{Les serveurs}{Cas simple}
\begin{verbatim}
<!-- Server side setup -->
<servers>

  <server host="192.168.56.2" port="80" type="tcp"/>

</servers>
\end{verbatim}
\end{frame}

% servers
\begin{frame}[fragile]{Les serveurs}{Round robin}

Round robin intégré dans tsung

\begin{verbatim}
<!-- Server side setup -->
<servers>

  <server host="www1" port="80" type="tcp"/>
  <server host="www2" port="80" type="tcp"/>
  <server host="www3" port="80" type="tcp"/>

</servers>
\end{verbatim}
\end{frame}

% charge
\begin{frame}[fragile]{La charge}{définition}

La définition de la ``charge''

  \begin{itemize}
  \item phase
  \item duration
  \item unit
  \end{itemize}

\end{frame}

% charge
\begin{frame}[fragile]{La charge}{Charge simple}

Charge à phase unique

\begin{verbatim}
<load>

 <arrivalphase phase="1" duration="60" unit="second">

  <users interarrival="10" unit="second"></users>

 </arrivalphase>

</load>
\end{verbatim}
\end{frame}

% charge
\begin{frame}[fragile]{La charge}{Charge montante}

Charge à phases multiples

\begin{verbatim}
<load>

 <arrivalphase phase="1" duration="60" unit="second">
  <users interarrival="10" unit="second"></users>
 </arrivalphase>

 <arrivalphase phase="2" duration="60" unit="second">
  <users interarrival="5" unit="second"></users>
 </arrivalphase>

 <arrivalphase phase="3" duration="60" unit="second">
  <users interarrival="1" unit="second"></users>
 </arrivalphase>

</load>
\end{verbatim}
\end{frame}

%
% options
%
\begin{frame}[fragile]{Les options}{Thinktime}

Temps de pause

\begin{verbatim}

<options> 
 <option name="thinktime" value="3" random="true" 
    override="false"></option>
</options>
\end{verbatim}
\end{frame}
%
% options
%
\begin{frame}[fragile]{Les options}{Thinktime}

User agent

\small

\begin{verbatim}

<options> 
 <option type="ts_http" name="user_agent">
  <user_agent probability="80">Mozilla/5.0 (X11; U; 
    Linux i686; en-US; rv:1.7.8) Gecko/20050513 
    Galeon/1.3.21</user_agent>
  <user_agent probability="20">Mozilla/5.0 (Windows; 
    U; Windows NT 5.2; fr-FR; rv:1.7.8) Gecko/20050511 
    Firefox/1.0.4</user_agent>
 </option>
</options>
\end{verbatim}
\end{frame}


\normalfont


%
%
%
\begin{frame}[fragile]{Les sessions}

Les sessions (le scénario)

\begin{verbatim}
<sessions>

 <session name='read' probability='100'  type='ts_http'>
  <request>
   <http url='/index.html' version='1.1' method='GET' />
  </request>
 </session>

</sessions>

\end{verbatim}
\end{frame}

%
\begin{frame}[fragile]{Les sessions}

Les transactions

\begin{verbatim}
<sessions>
 <session name='read' probability='100'  type='ts_http'>
  <request>
   <http url='/index.html' version='1.1' method='GET' />
  </request>
  <transaction name='images'>
   <request><http url='/one.png' version='1.1' method='GET' /></request>
   <request><http url='/two.png' version='1.1' method='GET' /></request>
  </transaction>
 </session>

</sessions>

\end{verbatim}
\end{frame}

%
%
%
\begin{frame}[fragile]{Les fonctions avancées}{Substitution}

\begin{verbatim}

<request subst="true">
 <http url='get.php?' 
  contents='%%readcsv:user%%&amp;lang=FR'  
  version='1.1' 
  method='POST'></http>
</request>

\end{verbatim}

readcsv est un module erlang qui renvoit une chaîne "login=LOGIN"

\end{frame}



%
%
%
\begin{frame}[fragile]{Les fonctions avancées}{La boucle for}
\begin{verbatim}

<for from="1" to="30" incr="1" var="counter">
  <transaction name="index_request">
   <request> 
    <http url='/?last_read=1' 
      version='1.1' 
      method='GET'></http>
   </request>
  </transaction>
  
 <thinktime value="5"/>   

</for>


\end{verbatim}
\end{frame}


\begin{frame}[fragile]{Les fonctions avancées}{Test du résultat}
\begin{verbatim}
	
<request>

 <match do="continue" when="match">Welcome !</match>
 <http url='/login.php' version='1.0' method='POST' 
    contents='username=nic&amp;user_password=sesame'
    content_type='application/x-www-form-urlencoded' >

</request>
\end{verbatim}
\end{frame}

\section{Les résultats}
% 
\begin{frame}{Log et HTML}

\begin{itemize}
\item log à tous les étages
\item output complet du traffic
\item pages htmls avec compteurs
\item graphs
\end{itemize}
\end{frame}


\begin{frame}{Log et HTML}

ALT + F2

\end{frame}


\section{Conclusion}

% 
\begin{frame}{Ce n'est qu'un début}

  \begin{itemize}
  \item Juste un aperçu 
  \item Réelle modularité (MySQL)
  \item Grande réactivité de Nicolas
  \end{itemize}

\end{frame}


% charge
\begin{frame}{What else ?}

Les autres outils libres

  \begin{itemize}
  \item ab
  \item httperf
  \item Siege
  \end{itemize}

Using free software for HTTP load testing By Leslie P. Polzer on August 12, 2008

  \url{http://www.linux.com/feature/143896}

\end{frame}


\begin{frame}{Contact}

\center

Merci
\vspace{0.5cm}

Questions ?

\vspace{1.5cm}

Rodolphe Quiédeville
\vspace{0.5cm}

rquiedeville@bearstech.com

\url{http://www.bearstech.com/}

\end{frame}


% End document
\end{document}

