I would suggest using loess for this type of monotonically increasing function.
Studying the derivative of a spline, we see that in some cases it is negative and nontrivial:
> plot(testx,testy) > sspl <- smooth.spline(testx,testy) > min(diff(sspl$y)) [1] -0.4851321
If we use loess, I think this problem will be less serious.
d <- data.frame(testx,testy) fit.lo <- loess(testy ~ testx,data=d) lines(fit.lo$x,fit.lo$y)
Then, checking the derivative, we get:
> min(diff(fit.lo$y)) [1] 1.151079e-12
This is essentially 0. Near 0, we sometimes get a trivially smaller negative value.
Here is an example of the loess fit above. 
Not sure if this will be done in all cases, but it seems to be better than spline.
source share