As soon as you apply \FPeval, you get something like 9.000000000000000000, which is not an integer to TeX's eyes, so the comparison is invalid.
You could use \lengthtest:
\documentclass{article}
\usepackage[nomessages]{fp}% http://ctan.org/pkg/fp -> FPeval
\usepackage{ifthen}
\expandafter\def\csname test1\endcsname{5}
\expandafter\def\csname test2\endcsname{4}
\begin{document}
\FPeval{\one}{\csname test1\endcsname+\csname test2\endcsname}
\FPeval{\two}{\csname test2\endcsname}
\ifthenelse{\lengthtest{\one pt > \two pt}}{case 1}{case 2}
\end{document}
but in my opinion it is much better to use expl3, that features expandable comparisons.
\documentclass{article}
\usepackage{xparse}
% see https://tex.stackexchange.com/a/467527/4427
\ExplSyntaxOn
\NewExpandableDocumentCommand{\xifthenelse}{mmm}
{
\bool_if:nTF { #1 } { #2 } { #3 }
}
\cs_new_eq:NN \numtest \int_compare_p:n
\cs_new_eq:NN \oddtest \int_if_odd_p:n
\cs_new_eq:NN \fptest \fp_compare_p:n
\cs_new_eq:NN \dimtest \dim_compare_p:n
\cs_new_eq:NN \deftest \cs_if_exist_p:N
\cs_new_eq:NN \namedeftest \cs_if_exist_p:c
\cs_new_eq:NN \eqdeftest \token_if_eq_meaning_p:NN
\cs_new_eq:NN \streqtest \str_if_eq_p:ee
\cs_new_eq:NN \emptytest \tl_if_blank_p:n
\prg_new_conditional:Nnn \xxifthen_legacy_conditional:n { p,T,F,TF }
{
\use:c { if#1 } \prg_return_true: \else: \prg_return_false: \fi:
}
\cs_new_eq:NN \boolean \xxifthen_legacy_conditional_p:n
% some syntactic sugar for variables
\NewDocumentCommand{\setvar}{mm}
{% #1 = name, #2 = value
\fp_zero_new:c { l_bilal_var_#1_fp }
\fp_set:cn { l_bilal_var_#1_fp } { #2 }
}
\NewExpandableDocumentCommand{\usevar}{m}
{
\fp_use:c { l_bilal_var_#1_fp }
}
\ExplSyntaxOff
\begin{document}
\setvar{test1}{5}
\setvar{test2}{4}
\setvar{one}{\usevar{test1}+\usevar{test2}}
\xifthenelse{\fptest{\usevar{one} > \usevar{test2}}}{case 1}{case 2}
\end{document}
Edit 2021
A more complete implementation taking also into account that expl3 now has \legacy_if_p:n.
\ExplSyntaxOn
\NewExpandableDocumentCommand{\xifthenelse}{mmm}
{
\bool_if:nTF { #1 } { #2 } { #3 }
}
\NewDocumentCommand{\newboolean}{m}
{
\cs_if_exist:cTF {if#1}
{
\msg_error:nnn { xifthen } { booleanexists } { #1 }
}
{
\exp_args:Nc \newif {if#1}
}
}
\NewDocumentCommand{\provideboolean}{m}
{
\cs_if_exist:cF {if#1}
{
\exp_args:Nc \newif {if#1}
}
}
\NewDocumentCommand{\setboolean}{mm}
{
\cs_if_exist:cTF {if#1}
{
\use:c { legacy_if_set_#2:n } { #1 }
}
{
\msg_error:nnn { xifthen } { wrongboolean } { #1 }
}
}
\msg_new:nnnn { xifthen } { booleanexists }
{
Boolean~\token_to_str:N \if #1~already~exists
}
{
Your~command~was~ignored.\
Type~<return>~to~continue~without~it.
}
\msg_new:nnnn { xifthen } { wrongboolean }
{
Boolean~\token_to_str:N \if #1~does~not~exist
}
{
Try~typing~<return>~to~proceed.\
If~that~doesn't~work,~type~X<return>~to~quit.
}
\cs_new_eq:NN \numtest \int_compare_p:n
\cs_new_eq:NN \oddtest \int_if_odd_p:n
\cs_new_eq:NN \fptest \fp_compare_p:n
\cs_new_eq:NN \dimtest \dim_compare_p:n
\cs_new_eq:NN \deftest \cs_if_exist_p:N
\cs_new_eq:NN \namedeftest \cs_if_exist_p:c
\cs_new_eq:NN \eqdeftest \token_if_eq_meaning_p:NN
\cs_new_eq:NN \streqtest \str_if_eq_p:ee
\cs_new_eq:NN \emptytest \tl_if_blank_p:n
\cs_new_eq:NN \boolean \legacy_if_p:n
\ExplSyntaxOff